数组 程序输出疑惑
你的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。
#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]); //这个不是在循环中 输出a[2]显然不对}应该#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[i]); } }
我的结果就是一个2。我想知道你的编译环境以及运行平台。我的是linux下的gcc。
你输出的只是一个数,可以用个输出字符的语句printf("test");替换掉 printf("%d",a[k])来验证;数组只有a[0],a[1]两个元素,你输出的确实是a[2〕但它是不存在的,只是内存中的一个地址而已!