数组 程序输出疑惑
你的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。
答:它在电缆电视的基础上,将分配网络的主干部分改为光缆,在各个服务节点处完成光电转换,再由同轴电缆将传输信号送到用户家里,可有效地实现Internet访问、电视点播...详情>>
答:这个问题我好象在 这个论坛上面 看到过 你自己找一找进入后有分类自己看 一定能找到你的答案的,如果解决了你的问题一定要给我加分哦! 谢谢!详情>>