有关定义数组常量的问题

LI-O 2014-04-09 09:00:07
#include<stdio.h>
#define indexs 5
int main(void)
{
int sum[indexs];
int index;
int sumer= 0;
for(index = 0; index < indexs;index++)
{
scanf("%d",&sum[index]);
sumer += sum[index];
}
printf("the sum is %d and sumer is %d\n",sum[index],sumer);
return 0;
}

这个,我自己试着去写的一个东西。

在 sumer += sum[index] 这时, 就是 sumer 与 sum[1]内的数 相加?
可是在 printf("the sum is %d and sumer is %d\n",sum[index],sumer); 里。 又变成了 元素数量。
试想,在最后 index 必然等于5, 为什么 printf里输出的 却是 它的元素数量而非 其 sum[5] 的值?
还有, 在这里,如果想用 for()来达到目的,必须设置一个变量与之相比较?
...全文
181 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
LI-O 2014-04-11
  • 打赏
  • 举报
回复
了解了。 当推出 for() 的时候, index == 5; 所以你们都说 数组越界。
LI-O 2014-04-11
  • 打赏
  • 举报
回复
引用 2 楼 u010005508 的回复:
数组访问越界了,最后一句改为printf("the sum is %d and sumer is %d\n",sum[index-1],sumer);即可
你没看见 #define indexs 5 ................... ................ ........... index < indexs
赵4老师 2014-04-10
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节都是可读写的,区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。 “多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个?
buyong 2014-04-10
  • 打赏
  • 举报
回复
你要是用vs2005以上的,运行时都会报错。
风吹得好舒服 2014-04-10
  • 打赏
  • 举报
回复
for循环之后,index的值变为了5(要知道在for循环的结束的时候index还有自加一次),所以在sum[index]的时候就会越界。如同2楼所说的index-1即可。
lijunbiao2080 2014-04-10
  • 打赏
  • 举报
回复
引用 4 楼 w15tp 的回复:
[quote=引用 2 楼 u010005508 的回复:] 数组访问越界了,最后一句改为printf("the sum is %d and sumer is %d\n",sum[index-1],sumer);即可
index减一干嘛。[/quote] 最后一次循环的时候,index = 5,不满足条件,跳出循环,这是index为5,数组大小为5,最高下标为4,所以要减一
点不亮的黑色 2014-04-10
  • 打赏
  • 举报
回复
最后的那个输出越界。二楼的挺好的。
LI-O 2014-04-10
  • 打赏
  • 举报
回复
引用 2 楼 u010005508 的回复:
数组访问越界了,最后一句改为printf("the sum is %d and sumer is %d\n",sum[index-1],sumer);即可
index减一干嘛。
LI-O 2014-04-10
  • 打赏
  • 举报
回复
好吧,口误。5个元素。不是 等于5。
highnewrain 2014-04-10
  • 打赏
  • 举报
回复
引用 4 楼 w15tp 的回复:
[quote=引用 2 楼 u010005508 的回复:] 数组访问越界了,最后一句改为printf("the sum is %d and sumer is %d\n",sum[index-1],sumer);即可
index减一干嘛。[/quote] 若数组元素个数为N,则下表为0到N-1
highnewrain 2014-04-09
  • 打赏
  • 举报
回复
数组访问越界了,最后一句改为printf("the sum is %d and sumer is %d\n",sum[index-1],sumer);即可
Morrisss_ 2014-04-09
  • 打赏
  • 举报
回复
首先,index不可能到5,也没有sum[5]这个元素。其次,再好好看看数组的基本概念吧。。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧