我尝试了这个数组示例并对其元素进行了增量/预增量
#include<stdio.h>
int main()
{
int j[5] = {5, 1, 15, 20, 25};
int k , l, m, n;
n = ++j[1];
k = ++j[1];
l = j[1]++;
m = j[k++];
printf("\n%d, %d, %d, %d", n, k, l, m );
return 0;
}
这里的输出是:
2, 4, 3, 20
如果我改变 n 和 k 的顺序 即代替
n = ++j[1];
k = ++j[1];
我写
k = ++j[1];
n = ++j[1];
输出变成:
3, 3, 3, 15
我在 windows10 的 mingw 编译器和 Kali Linux 的 GCC 上试过这个... 同样的问题。
这就像取不同的变量名会改变程序的输出。 可能是什么原因?
感谢大家帮我解决这个问题。
我没有考虑 k 的最后一个帖子增量。
结果会和我改变的一样
m=j[k++]
与
m = j[n++]
最佳答案
他们为什么不呢? k
、n
和 m
的值取决于它们在代码中的位置。
例如,
m = j[k++];
这将受到 k
的当前值的影响。
要添加一些关于前置和后置增量运算符,引用 C11
,
章节 §6.5.3.1,预增量
The value of the operand of the prefix
++
operator is incremented. The result is the new value of the operand after incrementation. [...]§6.5.2.4 章,后增量
The result of the postfix
++
operator is the value of the operand. As a side effect, the value of the operand object is incremented (that is, the value 1 of the appropriate type is added to it). [....]
我添加了一些打印语句,以检查每个语句后值如何受到影响。您还可以打印整个数组以更直观地看到变化。
int j[5] = {5, 1, 15, 20, 25};
int k , l, m, n;
printf("j[1] = %d\n", j[1]);
k = ++j[1];
printf("j[1] = %d, k = %d\n", j[1], k);
n = ++j[1];
printf("j[1] = %d, n = %d\n", j[1], n);
l = j[1]++;
printf("j[1] = %d, l = %d\n", j[1], l);
m = j[k++];
printf("m= %d, k = %d\n", m, k);
printf("\n%d, %d, %d, %d", n, k, l, m );
输出是:
j[1] = 1
j[1] = 2, k = 2
j[1] = 3, n = 3
j[1] = 4, l = 3
m= 15, k = 3
3, 3, 3, 15
关于c - 为什么交换变量名会改变 C 程序的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55176674/