【发布时间】:2016-09-09 06:12:14
【问题描述】:
#include<stdio.h>
struct test{
int a;
int b;
}m;
int main()
{
m.a=5;m.b=7;
struct test *p;
p = &m;
printf("p[0] = %d\n",*(p+0));
printf("p[1] = %d\n",*(p+1));
return 0;
}
我得到以下输出:
p[0] = 5 p[1] = 0
有人可以解释一下这种行为吗?有没有办法使用索引打印所有结构成员?
抱歉打错了。
(更新)
因为我可以使用索引 0 打印第一个元素,虽然指针的类型是“结构测试类型”并且第一个成员是整数,但我可以获得正确的值。因此,引发了有关此行为原因的问题。如果可以使用索引访问所有成员,就像访问第一个成员一样。
【问题讨论】:
-
你能告诉我们你为什么这样做
p = &a;吗? -
@hacks 先生,我认为 OP 的意思是
p = &m.a; -
@SouravGhosh;
p是struct test *类型,而&m.a是int *类型。 -
@hacks 对,但是地址可以用于引用整个结构或第一个变量,就类型而言,不是吗?
-
@SouravGhosh;你不认为这是不兼容的指针分配吗?另请注意,您在上一条评论中所说的仅适用于数组数据类型。
标签: c pointers struct printf pointer-arithmetic