结构体的问题:
#include <stdio.h>#include <stdlib.h>
struct A
{
int a;
long b;
}p1;
struct B
{
int a1;
long b1;
struct A AA;
}p2;
int main()
{
p1.a = 1;
printf("-----%d------\n",p2.AA.a);
}
这个输出为什么不是 1,而是 0 ?
你把1赋值给了p1的a,而p2中的结构体变量AA却没有获得初值,即AA中的a没有初值也就默认为0,所以输出的是0而不是1,看清楚只有p1中的a才是1,p2跟P1是没什么关系的 未闻丶花名 发表于 2014-6-30 13:05 static/image/common/back.gif
你把1赋值给了p1的a,而p2中的结构体变量AA却没有获得初值,即AA中的a没有初值也就默认为0,所以输出的是0而 ...
我把结构体里面的a赋值过以后,这个值就固定了,可以直接访问的啊,要不然结构体里面的结构体定义还有什么意义呢? 本帖最后由 catch 于 2014-6-30 13:16 编辑
p1和p2是两个不同的变量,它们在内存中开辟的存储空间是不同的。你对p1.a赋值只会存自己的值,不会影响p2.AA.a中的值。 AA是另外一个结构体A的变量,而p1是一个全局的结构体A变量,但是你访问的却是AA结构体变量,所以自然是0啊 流行语 发表于 2014-6-30 13:18 static/image/common/back.gif
p1和p2是两个不同的变量,它们在内存中开辟的存储空间是不同的。你对p1.a赋值只会存自己的值,不会影响p2.A ...
如果我要用一个结构体去访问另一个结构体里面的变量应该怎么做?
struct Test{
struct Test1 *t1;
struct Test2 *t2;
struct Test3 *t3;
struct Test4 *t4;
struct Test5 *t5;
struct Test *t;
};
像这样的定义不就是为了去访问其他结构体里面的变量吗?
本帖最后由 流行语 于 2014-6-30 17:41 编辑
你看一下这个,p1 和p2中的AA指向的内存地址是不一样的。
你可以直接打印出地址。
printf("%d\n",&p1);
printf("%d",&p2.AA);
你就会知道它们根本不是指向同一个地址。 流行语 发表于 2014-6-30 17:33 static/image/common/back.gif
你看一下这个,p1 和p2中的AA指向的内存地址是不一样的。
你可以直接打印出地址。
printf("%d\n",&p1);
那怎么访问一个结构体里面的结构体变量呢? 本帖最后由 catch 于 2014-6-30 17:57 编辑
catch 发表于 2014-6-30 17:46 static/image/common/back.gif
那怎么访问一个结构体里面的结构体变量呢?
p1,p2的内存空间都不一样,两者毫不相干
打印地址看看
printf("0x%p,0x%p",&p1,&p2);
printf is very important
哥们,p1和p2.AA的地址不一样了,肯定在自己的存储空间中存储自己的东西,所以p2.AA.aa怎么会输出1呢。这就好比两间房子A和B,A,B各自保存自己的东西。例如A中放了一个美女,B中没有放。那你在B中怎么会看见美女呢。 catch 发表于 2014-6-30 17:51 static/image/common/back.gif
喜欢散步 发表于 2014-7-2 05:24 static/image/common/back.gif
似乎明白了,谢谢~
页:
[1]