【发布时间】:2018-09-15 05:56:34
【问题描述】:
我有以下代码:
#include <stdio.h>
#include <stdlib.h>
#define CVAL(p) (*(p++))
int main()
{
int code[4] = {2, 100, 200};
int nn=0;
printf("code[0] address = %p\n", &code[0]);
printf("nn address = %p\n", &nn);
printf("nn content= %i\n\n", nn);
int *pt = &code[0];
nn = CVAL(pt); /*<-- line 18!*/
printf("nn address = %p\n", &nn);
printf("nn content = %i\n\n", nn);
printf("\n");
return 0;
}
你的输出是:
code[0] address = 0028FF2C
nn address = 0028FF28
nn content= 0
nn2 address = 0028FF28
nn2 content = 2
但是当我更改表达式并将其分开(第 18 行和第 19 行)时,nn2 的结果会发生变化!之前是 2,现在是 100。为什么?
...
pt++;/*<-- line 18!*/
nn = *pt;/*<-- line 19*/
...
输出:
code[0] address = 0028FF2C
nn address = 0028FF28
nn content= 0
nn2 address = 0028FF28
nn2 content = 100
【问题讨论】:
-
int *pt = &code[0];与int *pt = code;相同。见C11 Standard - 6.3.2.1 Other Operands - Lvalues, arrays, and function designators(p3)
标签: c pointers macros expression