在 C 语言中在结构名称之前添加'*'时是什么地址


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是数组的入口。但是什么是*csizeof(*c)的结果是PeoInfo的大小。当使用printf打印*cc[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] );

最新更新