以下程序段的运行结果是
struct ks{
int a;
int *b;
}s[4], *p;
int n=1, i;
for(i = 0; i<4; i++){
s[i].a = n;
s[i].b = &s[i].a;
n = n+2;
}
p = &s[0];
p++;
printf("%d,%d\n", (++p)->a, (p++)->a); /* 输出数据之间没有空格分隔 */
以下程序段的运行结果是
struct ks{
int a;
int *b;
}s[4], *p;
int n=1, i;
for(i = 0; i<4; i++){
s[i].a = n;
s[i].b = &s[i].a;
n = n+2;
}
p = &s[0];
p++;
printf("%d,%d\n", (++p)->a, (p++)->a); /* 输出数据之间没有空格分隔 */
大部分编译器对printf中的计算处理是从右往左执行的,所以有如下过程:
printf("%d,%d\n", (++p)->a, (p++)->a);
先执行(p++)->a,p提取出来,取p->a的值进行记录,然后执行p++进行自增;
然后执行(++p)->a,++在前,先执行加运算,然后在输出p->a。
上述内容可以写成如下过程:
printf("%d",p->a);
p=p+1; //该步执行p++
p=p+1; //该步执行++p
printf("%d",p->a);
因此最终输出结果为7,3