据说C中的*
运算符表示“指向变量的指针”,以下代码是合法的:
#include <stdio.h>
int main(){
int a=5;
int *p=&a;
printf("%d\n", *p);
return 0;
}
但以下代码是非法的:
#include<stdio.h>
struct pair{
int a,b;
};
int main(){
struct pair Alice, *Bob=&Alice;
Alice.a=1;
Alice.b=2;
printf("%d %d\n",*Bob.a,*Bob.b);
return 0;
}
那么,为什么*
运算符适用于指向普通变量的指针,但是对指向结构的指针不起作用?
答案 0 :(得分:5)
因为成员访问运算符.
的优先级高于间接运算符*
。
您应该使用括号来访问没有->
运算符的指向成员。
#include<stdio.h>
struct pair{
int a,b;
};
int main(){
struct pair Alice, *Bob=&Alice;
Alice.a=1;
Alice.b=2;
printf("%d %d\n",(*Bob).a,(*Bob).b);
return 0;
}
答案 1 :(得分:2)
由于运算符的优先级,您必须为变量括号或者使用->
运算符:
#include<stdio.h>
struct pair {
int a, b;
};
int main()
{
struct pair Alice, *Bob = &Alice;
Alice.a = 1;
Alice.b = 2;
printf("%d %d\n", (*Bob).a, (*Bob).b);
printf("%d %d\n", Bob->a, Bob->b);
return 0;
}