LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: shell

简单的数组问题 ???

[复制链接]
发表于 2004-8-9 18:08:10 | 显示全部楼层
because the effiency, as we know the cpu only can get 2^n th (i.e. 2 4 8 16 32 64 128 ...),so the compiler determine the 11 units to store this array as 16 to get effiency.

it's just acknowledge

you can use gcc -S to get the asm code
发表于 2004-8-9 18:26:38 | 显示全部楼层
最初由 shell 发表
不是,我想问的是,同样都是int a[10]的,为什么a[14]还输得出,可a[15]就输不出 ?

为什么 ?


如果改成java你会得到 IndexOutOfBound Exception错误
由于C语言编译器没有提供下标的监测,所以你定义的10个元素的数组 ,实际上可以使用的是随便的
在你的循环中,我也觉得奇怪,按照程序的结构,应该输出15 ,即使超出范围,可能的解释是程序中写入的15被其它程序修改为不可显示内容。
  可以做个实验,换台机器,或许就输出了,这就是C,灵活!

  但建议实际软件中一定要避免这种操作,可能导致某个设备或系统崩溃!
 楼主| 发表于 2004-8-19 00:17:06 | 显示全部楼层

回复: 简单的数组问题 ???

最初由 shell 发表
  1. main(void)
  2. {
  3.   int i,sum=0,a[10];  \\这里是a[10]
  4.   for (i=0;i<=15;i++)  \\改成for (i=0;i<=14;i++)就可以正常输出
  5.   {
  6.     a[i]=i;
  7.     printf(" %d ",a[i]);
  8.   }
  9. }
复制代码


为什么这样子还可以输出 ? 为什么到了15就输出不了了 ?



请问这里的sum=0为什么要初始化 ?
发表于 2004-8-19 07:03:49 | 显示全部楼层
变量最好初始化以后再使用。这个是为了避免出现古怪的错误。默认情况下,c分配的变量不会自动初始化的。除非你用vc编译debug的程序。
 楼主| 发表于 2004-8-20 01:53:58 | 显示全部楼层
好的,谢谢你们,,,,!


那数组比如我都不知道a[?]这个?号里要存多少,怎么办 ??

怎么初始化 ?
发表于 2004-8-20 09:17:00 | 显示全部楼层
use malloc()
发表于 2004-8-20 09:56:50 | 显示全部楼层
C99已经支持动态数组了
发表于 2004-8-20 11:50:22 | 显示全部楼层
为什么我的能显示呢?
14,15都可以正常显示。
 楼主| 发表于 2004-8-20 20:37:30 | 显示全部楼层
最初由 lucifer 发表
C99已经支持动态数组了


C99是什么 ?
发表于 2004-8-20 21:36:51 | 显示全部楼层
google it
http://www.google.com
最初由 shell 发表
C99是什么 ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表