typedef struct PeoInfo
{
char name[20];
int age;
char sex[5];
char tele[12];
char addr[30];
}
struct PeoInfo c[10] = {0};
printf("p=%xn", *c);
printf("p=%xn", c[0]);
在这种情况下,sizeof(c)
和sizeof(*c)
具有不同的结果。在我看来,c
是数组的入口。但是什么是*c
?sizeof(*c)
的结果是PeoInfo
的大小。当使用printf
打印*c
和c[0]
的地址时,结果也不同。我真的很困惑。
在此表达式*c
中,数组指示符c隐式转换为指向其类型为struct PeoInfo *
的第一个元素的指针,应用解引用运算符将生成类型为struct PeoInfo
的对象。
因此表达式CCD_ 13(其中表达式*c
不被评估并且仅确定其类型(产生类型为struct PeoInfo
的对象的大小。
由于下标运算符c[0]的计算方式类似于*(c+0(,与*c相同,因此这些printf语句将输出相同的值
printf( "&*c = %pn", ( void * )&*c );
printf( "&c[0] = %pn", ( void * )&c[0] );