结构体的成员变量是指针的地址有关问题
结构体的成员变量是指针的地址问题
代码如下,头文件什么的就不写了
打印结果显示t的地址是正确的,但是t->a,t->b的地址却不正确。&t->c的地址是t的地址偏移8个字节,
我觉得t->a和t->b的地址应该是t和t偏移4个字节吧。虽然我没有给这些指针malloc地址空间。但是一想没有分配地址空间的指针应该没有值,就像随便声明了一个指针,系统随机给它一个值。
两种想法自相矛盾,请问是怎么回事
------解决方案--------------------
那是因为它指向还没有,随机值!
但是打印它指针本身递地址都是间隔4个字节是对的!
------解决方案--------------------
指针变量本身的地址
指针变量中存储的数值(地址)
代码如下,头文件什么的就不写了
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
------解决方案--------------------
指针变量本身的地址
指针变量中存储的数值(地址)