C/C++:写代码时将数组放在main函数里面还是外面的区别

刚开始学习的时候一直习惯起手先写main函数,然后变量什么的都写在main函数里面,也一直没有什么问题

但是开始系统性的做题的时候,发现基本上讲竞赛代码的书和博客都将数组写在main函数的外面。如果一个数组并不是全局数组,他的作用域就只在main函数里面,为什么还要写在main函数的外面呢?

之前一直不大理解,一直都图方便在main函数里面对数组进行定义。直到一次运行的时候,代码并没有问题,但是每次运行的时候都会出现停止工作的问题。测试了很久才发现是因为把数组开在了main函数里面的问题


把数组开在main函数的里面和外面到底有什么区别?

问题来自于开数组的区域不同
在运行代码的时候,操作系统会分配不同的内存区域来运行代码

  • 栈区:由操作系统自动分配释放,存放函数的参数值,局部变量的值;不需要时系统会自动清除
  • 堆区:由new分配的内存块,也就是说在代码中new一个数组,内存由堆区分配;堆区不由编译器管,由应用程序控制(相当于程序员控制。如果程序员没有释放掉,程序结束后,操作系统会自动回收
  • 数据区:也称全局区或者静态区,存放全局的东西,比如全局变量
  • 代码区:存放执行代码的地方,类似if else,while,for这种语句

也就是说,在main函数外面开一个数组,他的内存分配在数据区里;如果在main函数内部开数组,内存分配在栈区内。一般来说栈区的内存是比较小的,所以平常开一些小一点的数组是没问题的;但如果题目要求的数组比较大,那就会出现爆出的问题,程序无法访问内存就会出错;相对的,数据区的内存较大,所以开数组开在数据区/main函数外面,就不易出现这样的问题

posted @ 2024-04-11 16:46  龙雪  阅读(3)  评论(0编辑  收藏  举报  来源