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);
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);才是对的