爱问知识人 爱问教育 医院库

数组 程序输出疑惑

首页

数组 程序输出疑惑


        

提交回答
好评回答
  • 2018-04-07 08:22:26
      你的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。

    画***

    2018-04-07 08:22:26

其他答案

    2018-04-07 12:22:26
  • #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]);         } }

    断***

    2018-04-07 12:22:26

  • 2018-04-07 11:22:26
  • 我的结果就是一个2。我想知道你的编译环境以及运行平台。我的是linux下的gcc。

    林***

    2018-04-07 11:22:26

  • 2018-04-07 06:22:26
  • 你输出的只是一个数,可以用个输出字符的语句printf("test");替换掉 printf("%d",a[k])来验证;数组只有a[0],a[1]两个元素,你输出的确实是a[2〕但它是不存在的,只是内存中的一个地址而已!

    w***

    2018-04-07 06:22:26

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):