结构体的成员变量是指针的地址有关问题

结构体的成员变量是指针的地址问题
代码如下,头文件什么的就不写了

typedef struct
{
    int *a;
    int *b;
    int c;
}test;

int main( void )
{
    test *t = ( test * )malloc( sizeof( test ) );
    printf( "%x\n", t );
    printf( "%x\n", t->a );
    printf( "%x\n", t->b );
    printf( "%x\n", &t->c );
}

打印结果显示t的地址是正确的,但是t->a,t->b的地址却不正确。&t->c的地址是t的地址偏移8个字节,
我觉得t->a和t->b的地址应该是t和t偏移4个字节吧。虽然我没有给这些指针malloc地址空间。但是一想没有分配地址空间的指针应该没有值,就像随便声明了一个指针,系统随机给它一个值。
两种想法自相矛盾,请问是怎么回事

------解决方案--------------------
那是因为它指向还没有,随机值!
但是打印它指针本身递地址都是间隔4个字节是对的!

printf("s = %p \n", pTest);
    printf("a = %p \n", &(pTest->a));
    printf("b = %p \n", &(pTest->b));
    printf("c = %p \n", &(pTest->c));

//结果
s = 0x8526008 
a = 0x8526008 
b = 0x852600c 
c = 0x8526010

------解决方案--------------------
指针变量本身的地址
指针变量中存储的数值(地址)