如何读取包含c中指针的长表达式?

时间:2019-05-27 11:13:37

标签: c++ c arrays pointers

读取包含很多指针和运算符的长表达式应遵循什么规则?如何确定优先级?

例如,我们如何读取这些表达式?

#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);
}

1 个答案:

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

通过这种方式,您可以系统地继续分析复杂的表达式。