数组 程序输出疑惑

来源:百度知道 编辑:UC知道 时间:2024/06/01 23:41:48
题目如下:
写出下面程序的运行结果:
#include<stdio.h>
void main()
{
int a[2]={0},i,j,k=2;
for(i=0;i<k;i++)
for(j=0;j<k;j++)
a[j]=a[i]+1;
printf("%d",a[k]);
}
习题答案是:
1245120
我在计算机上运行的结果也是这个结果,但是就是无法理解它。
一直搞不明白既然k=2,那么a[k]怎么可能会被输出,而且for循环下面直到printf函数连花括号都没有,怎么会输出7个结果来?
希望高手不吝赐教!~谢谢~

你的k越界了,对a[2]来说,只有a[0]和a[1]这两个元素,你的打印语句打的是数组外面的元素,这个值是随机的。不信你把开发环境关掉从头再来一次结果肯定是不一样的。这个结果和上面的for语句没有关系。你把那几句删掉结果仍然不会变。

我给你举个例子吧
#include<stdio.h>
void main()
{
int j=2,a[2]={0};// 内存分配,j紧接着数组a分配。
int i,k=2;
printf("%d ",a[k]);
printf("%p %p %p %p",a,&i,&j,&k);//打印这几个变量的地址。你可以看一下a的值+8是不是等于j的地址。(之所以加8是因为一个整数占4字节,两个占8字节)。
}
这个程序你去执行看一下,你可以看到输出的a[k]就是j的值,为什么会这样,就是因为j在分配内存空间的时候就分配在a数组的后面的,因此你打印a[2]越界,就越界到了j。

因为
for(i=0;i<k;i++)
for(j=0;j<k;j++)
a[j]=a[i]+1;

这个循环没包括printf("%d",a[k]);

你应该
for(i=0;i<k;i++)
for(j=0;j<k;j++)
{a[j]=a[i]+1;
printf("%d",a[k]);
}

它是输出的一个数

a[k]是一个a数组所在内存的下一个地址内的内容

我的结果就是一个2。我想知道你的编译环境以及运行平台。我的是linux下的gcc。

#include<stdio.h>
void main()
{
int a[2]={0},i,j,k=2;
for(i=0;i<k;i++)
for(j=0;j<k;j++)