为什么不能和*一起使用。访问结构成员?

时间:2016-06-03 16:19:34

标签: c

据说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;
}

那么,为什么*运算符适用于指向普通变量的指针,但是对指向结构的指针不起作用?

2 个答案:

答案 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;
}