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编译器差别没有关系。 展开
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编译器差别没有关系。 展开
7个回答
展开全部
____________________
| Stack区(数组,指针,结构体,局部变量)
____________________
| Static变量(静态变量,全局变量)
____________________
| Heep区(堆区)
____________________
| 代码段
____________________
一个程序的内存分配是上面那个样子的,因为静态、全局变量是在堆上分配空间的所以可以大一些(有多大就看你的系统和编译器了,你可以分配比你的实际物理内存更大的空间编译不报错,运行就不行了)。
局部变量是分配在栈上的,而栈是堆的一块区域,所以大小是受限的,我在VC6+XP SP3里面试的最大不能超过1036084字节。栈的大小也是跟系统和编译器有关。
自打电脑进入386时代以后所有的段都可以访问到4G内存空间,就是所谓的平坦模式(看看汇编就知道了这部分内容在书的最后几章一般都被忽略了),所以现在关于段的概念是比较模糊的,也不太常用。
你的第一个定义错了是因为超出是1036084(259021*4)这个范围,你定义了300000,第三个是210000,第四个是200000,就对了。堆上的空间就不知道是多大了我试了5*1024*1024结果也没溢出,可能会是个很大的数。
如果用动态分配的办法,就是在堆上分配,就不受这些限制。
| Stack区(数组,指针,结构体,局部变量)
____________________
| Static变量(静态变量,全局变量)
____________________
| Heep区(堆区)
____________________
| 代码段
____________________
一个程序的内存分配是上面那个样子的,因为静态、全局变量是在堆上分配空间的所以可以大一些(有多大就看你的系统和编译器了,你可以分配比你的实际物理内存更大的空间编译不报错,运行就不行了)。
局部变量是分配在栈上的,而栈是堆的一块区域,所以大小是受限的,我在VC6+XP SP3里面试的最大不能超过1036084字节。栈的大小也是跟系统和编译器有关。
自打电脑进入386时代以后所有的段都可以访问到4G内存空间,就是所谓的平坦模式(看看汇编就知道了这部分内容在书的最后几章一般都被忽略了),所以现在关于段的概念是比较模糊的,也不太常用。
你的第一个定义错了是因为超出是1036084(259021*4)这个范围,你定义了300000,第三个是210000,第四个是200000,就对了。堆上的空间就不知道是多大了我试了5*1024*1024结果也没溢出,可能会是个很大的数。
如果用动态分配的办法,就是在堆上分配,就不受这些限制。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第3个和第1个不是一样的么,怎么一个对一个错
在函数内定义的数组,属于auto型变量,占用的是系统栈的空间,而系统栈默认只有1M大小,放不了太大的数组.
函数外定义的数组,属于全局变量,占用的是全局空间,比栈要大很多,所以可以放较大的数据
在函数内定义的数组,属于auto型变量,占用的是系统栈的空间,而系统栈默认只有1M大小,放不了太大的数组.
函数外定义的数组,属于全局变量,占用的是全局空间,比栈要大很多,所以可以放较大的数据
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里是一片很详细的关于堆栈的文档你不妨看看!
负家子弟说的很好,但有些地方有出入建议你再看下这个定会有很好的理解
http://tieba.baidu.com/f?kz=150791801
*********************************
是啊富家子弟再次解释一下吧~!!~
*********************************
请问楼主你说的错啦是指什么啊,编译通不过还是连接时啊
还是执行时啊?
谢谢
负家子弟说的很好,但有些地方有出入建议你再看下这个定会有很好的理解
http://tieba.baidu.com/f?kz=150791801
*********************************
是啊富家子弟再次解释一下吧~!!~
*********************************
请问楼主你说的错啦是指什么啊,编译通不过还是连接时啊
还是执行时啊?
谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个不太好说,要看你是用那一种C编译器了。
不同的编译是不一样的。如何你vs2005那是肯定不会出错的。
不同的编译是不一样的。如何你vs2005那是肯定不会出错的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道你第一种定义错误是什么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询