c语言中数组定义的问题~~!

#include<stdio.h>voidmain(){inta[100000],b[100000],c[100000];}这样定义出错了!#include<stdio.... #include <stdio.h>
void main()
{
int a[100000],b[100000],c[100000];
}
这样定义出错了!

#include <stdio.h>
int a[100000],b[100000],c[100000];
void main()
{
}
这样定义对的!

#include <stdio.h>
void main()
{
int a[100000],b[100000],c[10000];
}
这样定义对的!

#include <stdio.h>
int c[100000];
void main()
{
int a[100000],b[100000];
}
这样是对的!

请明白的人帮忙解释。希望能解释清楚。谢谢!
希望能说出每一种的区别。谢谢~~

负家子弟::你说的那个1036084,好像我没有超过它的大小吧?!

zxkdeem::晕。你要在pku上提交,就不区分,什么编译器了。这个和vs,vc编译器差别没有关系。
展开
 我来答
torjanz
2009-08-04 · TA获得超过402个赞
知道小有建树答主
回答量:65
采纳率:0%
帮助的人:108万
展开全部
主函数内定义的数组在堆栈段中分配内存。
全局变量数组在数据段中分配内存。
一般数据段比堆栈段大很多,
所以堆栈段分配不了的内存,数据段可以分配

(1)在堆栈段中分配内存,由于太大无法分配,所以错误。
(2)在数据段中分配内存,数据段可以分配,无错误。
(3)数组比(1)需要的内存少,在堆栈段大小范围内,可以分配,无错误
(4)同(3)
负家子弟
2009-08-04 · TA获得超过3567个赞
知道大有可为答主
回答量:1336
采纳率:0%
帮助的人:1442万
展开全部
____________________
| Stack区(数组,指针,结构体,局部变量)
____________________
| Static变量(静态变量,全局变量)
____________________
| Heep区(堆区)
____________________
| 代码段
____________________

一个程序的内存分配是上面那个样子的,因为静态、全局变量是在堆上分配空间的所以可以大一些(有多大就看你的系统和编译器了,你可以分配比你的实际物理内存更大的空间编译不报错,运行就不行了)。
局部变量是分配在栈上的,而栈是堆的一块区域,所以大小是受限的,我在VC6+XP SP3里面试的最大不能超过1036084字节。栈的大小也是跟系统和编译器有关。
自打电脑进入386时代以后所有的段都可以访问到4G内存空间,就是所谓的平坦模式(看看汇编就知道了这部分内容在书的最后几章一般都被忽略了),所以现在关于段的概念是比较模糊的,也不太常用。

你的第一个定义错了是因为超出是1036084(259021*4)这个范围,你定义了300000,第三个是210000,第四个是200000,就对了。堆上的空间就不知道是多大了我试了5*1024*1024结果也没溢出,可能会是个很大的数。

如果用动态分配的办法,就是在堆上分配,就不受这些限制。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
忘至白葬不情必0T
2009-08-04 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
第3个和第1个不是一样的么,怎么一个对一个错

在函数内定义的数组,属于auto型变量,占用的是系统栈的空间,而系统栈默认只有1M大小,放不了太大的数组.
函数外定义的数组,属于全局变量,占用的是全局空间,比栈要大很多,所以可以放较大的数据
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
iamoracle
2009-08-04 · TA获得超过827个赞
知道答主
回答量:98
采纳率:0%
帮助的人:105万
展开全部
这里是一片很详细的关于堆栈的文档你不妨看看!
负家子弟说的很好,但有些地方有出入建议你再看下这个定会有很好的理解
http://tieba.baidu.com/f?kz=150791801
*********************************
是啊富家子弟再次解释一下吧~!!~
*********************************
请问楼主你说的错啦是指什么啊,编译通不过还是连接时啊
还是执行时啊?
谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b054a1557
2009-08-04 · 超过14用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:47.3万
展开全部
这个不太好说,要看你是用那一种C编译器了。
不同的编译是不一样的。如何你vs2005那是肯定不会出错的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
js305741121
2009-08-04 · TA获得超过104个赞
知道答主
回答量:30
采纳率:0%
帮助的人:29.5万
展开全部
不知道你第一种定义错误是什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式