大家好,新年快乐!
我很难理解C语言中的指针.据我所知,指针是一个存储常规变量地址的特殊变量.
我正在发布两个相同的代码示例.在第一次我输入scanf中&d1.am
.
在第二个示例中,如果我更改&d1.am
为ptd1.am
它会弹出编译错误,我无法理解为什么.
struct student{ int am; char stname[20]; char stsurname[20]; }; int main(){ struct student d1; printf("1st student\n"); printf("Enter am\n"); scanf("%d", &d1.am)
第二个等效样本:
struct student{ int am; char stname[20]; char stsurname[20]; }; int main(){ struct student d1; struct student *ptd1; ptd1=&d1; printf("1st student\n"); printf("Enter am\n"); scanf("%d", &(*ptd1).am);
我知道正确的是键入&(*ptd1).am
但我无法理解为什么.如何&(*ptd1).am
等于&d1.am
和不等ptd1.am
?我打字清楚了ptd1=&d1
!
在此先感谢您的帮助!
.
运算符的优先级高于一元&
.&d1.am
相当于&(d1.am)
while ptd1.am
等于(&d1).am
,表示&d1.am
!= (&d1).am
.