鱼C论坛

 找回密码
 立即注册
查看: 2579|回复: 14

结构体的问题:

[复制链接]
发表于 2014-6-30 12:51:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-30 13:05:28 | 显示全部楼层
你把1赋值给了p1的a,而p2中的结构体变量AA却没有获得初值,即AA中的a没有初值也就默认为0,所以输出的是0而不是1,看清楚只有p1中的a才是1,p2跟P1是没什么关系的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-30 13:08:14 | 显示全部楼层

我把结构体里面的a赋值过以后,这个值就固定了,可以直接访问的啊,要不然结构体里面的结构体定义还有什么意义呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-30 13:14:28 | 显示全部楼层
本帖最后由 catch 于 2014-6-30 13:16 编辑

struct.png
struct.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-6-30 13:18:33 | 显示全部楼层
p1和p2是两个不同的变量,它们在内存中开辟的存储空间是不同的。你对p1.a赋值只会存自己的值,不会影响p2.AA.a中的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-6-30 13:20:42 | 显示全部楼层
AA是另外一个结构体A的变量,而p1是一个全局的结构体A变量,但是你访问的却是AA结构体变量,所以自然是0啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-30 13:21:50 | 显示全部楼层
流行语 发表于 2014-6-30 13:18
p1和p2是两个不同的变量,它们在内存中开辟的存储空间是不同的。你对p1.a赋值只会存自己的值,不会影响p2.A ...

如果我要用一个结构体去访问另一个结构体里面的变量应该怎么做?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-30 13:26:38 | 显示全部楼层
struct Test{
        struct Test1 *t1;
        struct Test2 *t2;
        struct Test3 *t3;
        struct Test4 *t4;
        struct Test5 *t5;
        struct Test *t;
};


像这样的定义不就是为了去访问其他结构体里面的变量吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-6-30 17:33:39 | 显示全部楼层
本帖最后由 流行语 于 2014-6-30 17:41 编辑

你看一下这个,p1 和p2中的AA指向的内存地址是不一样的。
你可以直接打印出地址。
printf("%d\n",&p1);
printf("%d",&p2.AA);
你就会知道它们根本不是指向同一个地址。
T3EVERSY0REUD$_]65LX)JN.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-30 17:46:25 | 显示全部楼层
流行语 发表于 2014-6-30 17:33
你看一下这个,p1 和p2中的AA指向的内存地址是不一样的。
你可以直接打印出地址。
printf("%d\n",&p1);

那怎么访问一个结构体里面的结构体变量呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-30 17:51:21 | 显示全部楼层
本帖最后由 catch 于 2014-6-30 17:57 编辑
catch 发表于 2014-6-30 17:46
那怎么访问一个结构体里面的结构体变量呢?

struct.png
struct.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-6-30 18:11:54 | 显示全部楼层
p1,p2的内存空间都不一样,两者毫不相干

打印地址看看

printf("0x%p,0x%p",&p1,&p2);

printf is very important
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-1 09:36:50 | 显示全部楼层
哥们,p1和p2.AA的地址不一样了,肯定在自己的存储空间中存储自己的东西,所以p2.AA.aa怎么会输出1呢。这就好比两间房子A和B,A,B各自保存自己的东西。例如A中放了一个美女,B中没有放。那你在B中怎么会看见美女呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-2 05:24:43 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-2 08:36:45 | 显示全部楼层

似乎明白了,谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 14:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表