c 语言 结构访问 的问题

来源:百度知道 编辑:UC知道 时间:2024/05/09 11:49:32
我定义了一个结构,如下

typedef struct { int a[10];}name1;

typedef struct {int a; int b; aa c;}name2;

name2 st1;
name2 *p;
p=&st1;

在使用中,我发现 :
p+sizeof(int)!=&(p->a);

我不明白为什么,清高手指点,谢谢!

在windows 和 linux 下都是这样的结果。
sorry,

我的问题没有写清楚,
应该是:
typedef struct { int a[10];}name1;

typedef struct {name1 a; int b; name1 c;}name2;

name2 st1;
name2 *p;
p=&st1;

在使用中,我发现 :
p+sizeof(name1)!=&(p->b);

呵呵,a成员是name2结构的第一个成员,地址就是结构的首地址了.

你的写法错了,p是name2 *的指针,那么它的加减操作就是以name2的结构大小为基础的加减,也就是说,它的加1就是加上了name2的结构大小,而不是你所认为的加上了1个字节.

改成(int)p+sizeof(name1)==(int)(&(p->b))就对了

肯定啊
p==&(p->a)
才对.

再答
p+sizeof(name1)==&(p->b);是不对的
p+sizeof(name1)-1==&(p->b);才是对的