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

数组 程序输出疑惑

首页

数组 程序输出疑惑


        

提交回答
好评回答
  • 2019-03-14 17:43:40
      你的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。

    杨***

    2019-03-14 17:43:40

其他答案

    2019-03-14 18:03:45
  • #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]);         } }

    郭***

    2019-03-14 18:03:45

  • 2019-03-14 17:41:18
  • 我的结果就是一个2。我想知道你的编译环境以及运行平台。我的是linux下的gcc。

    唐***

    2019-03-14 17:41:18

类似问题

换一换
  • 互联网 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 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
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):