gpt4 book ai didi

gcc 中的 C 副作用(前缀/后缀运算符和优先级)

转载 作者:太空狗 更新时间:2023-10-29 15:20:03 28 4
gpt4 key购买 nike

<分区>

我有小的 C 代码:

#include<stdio.h>
int main()
{
int z[]= {1,2,3,4,5,6};
int i = 2, j;
printf("i=%d \n",i);

z[i] = i++;

for (j=0;j < 6;j++ )
printf ("%d ", z[j]);

printf("\ni=%d \n",i);
}

输出:

i=2  
1 2 2 4 5 6
i=3

计算表达式的优先顺序是 首先,评估 z[i]。因为这里的 i 是 2,所以它变成了 z[2]。 接下来,计算 i++,即产生 2,i 变为 3。 最后执行=,将2(即i++产生的值)放入z[2]

这解释了上面的输出,即 1 2 2 4 5 6

但是如果我们将上面的代码从 i++ 更改为++i 即

#include<stdio.h>
int main()
{
int z[]= {1,2,3,4,5,6};
int i = 2, j;
printf("i=%d \n",i);

z[i] = ++i;

for (j=0;j < 6;j++ )
printf ("%d ", z[j]);

printf("\ni=%d \n",i);
}

然后输出就奇怪地不同了,它是:

i=2  
1 2 3 3 5 6
i=3

如果我们按照上面的优先顺序(C 规范说 [index] 比++ 早绑定(bind))那么输出应该是 1 2 3 4 5 6。

我只是想知道为什么上面的优先顺序不能解释这个?

我的编译器是 ubuntu 11.04 上的 gcc 4.5.2

感谢和问候,卡 PIL

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com