几个月前我开始学习编程,在大学学习C语言。今天,我尝试做一些事情,但编辑器中的结果没有显示正确的结果。这是代码:
#include <stdio.h>
int main()
{
int a[7]={1,2,3,4,5,6,7};
int x,y,z;
x=--a[5]; //In my opinion I got the result 5, because at the index of 5
//is element with value of 6, I decremented that number and got 5
y=a[3]+a[x]; //a[3]+a[5] in this case, I get a[8], and value for that index is 9
z=a[x++]; //I do this: a[5++], switched the value of x which is 5 and increment, and at the index of 5 was value of 6, I think
printf("%d,%d,%d",x,y,z);
}
在我的编辑器中,结果是:6,9,5
就我而言,我得到了结果:5,9,6
我知道这是一个无用的问题,但我无法解决问题。 也许是关于增量和减量的操作。
答案 0 :(得分:1)
x = - a [5] ==&gt; x =( - (a [5]))==&gt; x =(a [5] = a [5] -1)==&gt; x =(a [5] = 6-1)==&gt; x =(a [5] = 5)==&gt; X = 5
y = a [3] + a [5] ==&gt; y = 4 + 5 ==&gt; Y = 9
z = a [x ++] ==&gt; z = a [x]且x = x + 1 ==&gt; z = a [5]且x = 5 + 1 ==&gt; z = 5且x = 6
最后x = 6,y = 9且z = 5
如果你弄错了,[3] + a [5]不等于[3 + 5],即[8]。 a [3] + a [5] = a [3]的值+ [5]
的值而且,似乎你错误地解释了一些事情。您的数组 a 只有 0到6 的索引。请记住,索引8及以上的值不是8,9,10 ...它们是垃圾值,也可能是负数。通过诸如[8]之类的东西访问它们将导致未定义的行为。
答案 1 :(得分:1)
这是不正确的:
y=a[3]+a[x]; //a[3]+a[5] in this case,i get a[8],and value for that index is 9
a[8]
是您a[3 + x]
而不是a[3] + a[x]
所得到的。
a[3]
为4
,a[x]
a[5]
为5
,因此a[3] + a[x]
= 4 + 5 = 9
。