大家好,新年快乐!
我很难理解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)
Run Code Online (Sandbox Code Playgroud)
第二个等效样本:
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);
Run Code Online (Sandbox Code Playgroud)
我知道正确的是键入&(*ptd1).am但我无法理解为什么.如何&(*ptd1).am等于&d1.am和不等ptd1.am?我打字清楚了ptd1=&d1!
在此先感谢您的帮助!
.运算符的优先级高于一元&.&d1.am相当于&(d1.am)while ptd1.am等于(&d1).am,表示&d1.am!= (&d1).am.