c中取地址运算符&与指针取成员运算符->的优先级,是->的优先级高于&。
可以通过以下小程序测试。
假设一个结构体形如:
struct Test { int apple; };
现在声明并定义一个结构指针,并初始化成员:struct Test *pTest = (struct Test *)malloc(sizeof(struct Test)); ptest->apple = 1;
可以通过表达式(&ptest->apple)来测试,&与->的优先级孰高孰低。假设ptest->apple的地址为0x123456则表达式(&ptest->apple)有如下表中所列的情况:
& 与 ->的运算优先级 &ptest->apple ->优先级高 0x123456 (是ptest->apple的地址,等价于&(ptest->apple)) &优先级高 报错 (等价于(&ptest)->apple,(&ptest)是一个指针的地址,也就是指针的指针,它不是结构指针,因此无法用取指针运算符。) 测试程序:
//getaddress_getmember_priority.c #include <stdio.h> #include <stdlib.h> struct Test { int apple; }; int main() { struct Test *ptest = (struct Test *)malloc(sizeof(struct Test)); if(NULL == ptest) { printf("Malloc error: There is no memory.\n"); } int *papple = &(ptest->apple); if(papple == (&ptest->apple)) { printf("[(->) > &]: \n &ptest->apple is same as &(ptest->apple).\n"); } else { printf("note:this can't be priented.Because (&ptest) has no member apple.\n"\ "[(->) < &]: \n &ptest->apple is same as (&ptest)->apple.\n"); } return 0; }
结果证实,运算符->优先级高于&。