读取包含很多指针和运算符的长表达式应遵循什么规则?如何确定优先级?
例如,我们如何读取这些表达式?
#include <stdio.h>
int x, y, **p;
char c[100];
int main (void) {
x = y = 4;
*((int**)c) = &x; *(((int**)c)+1)= &y; p=(int**)c;
// printf("%d %d \n",x ,y);
*(p[0])=**(p+1);
y= (*(p[1])) - (*(p[0]));
x= (&(((int*)p)[1])) - (&(((int*)p)[0]));
// printf("%x %x \n",x ,y);
return(0);
}
答案 0 :(得分:-1)
要分析一个:
*((int**)c) = &x; *(((int**)c)+1)= &y; p=(int**)c;
哦...这是三个陈述:
*((int**)c) = &x;
*(((int**)c)+1)= &y;
p=(int**)c;
第一个:
*((int**)c) = &x;
在这里,(int**)c
意味着c
必须解释为一个指向int的指针(称为“ cast”)。为了简单起见,我们称其为ppInt
。所以我们有:
*(ppInt) = &x;
这表示此ppInt
必须被取消引用,即“获取它指向的内容”并为其分配地址x
。
通过这种方式,您可以系统地继续分析复杂的表达式。