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

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

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


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

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

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

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

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

  1. C语言自定义函数放在main函数前面和后面的区别

    C语言要求函数先定义后调用,将主调函数放在被调函数的后面,就像变量先定义后使用一样.如果主调函数放在自定义函数的前面,就需要在函数调用前,加上函数原型声明.如果不声明,编译时会默认调用函数是int类型 ...

  2. 关于在写代码时如何使用绝对路径与相对路径及其简单介绍

    在写代码时,我们经常需要使用到其他的一些资源,但是对于一些像我这样经常用绝对路径不用相对路径的新手菜鸟来说,看网上的那些关于绝对路径相对路径的介绍资料也有点难理解,毕竟-没试过的话确实不大能理解. 所 ...

  3. VSCode内用markdown写代码时出现很多段落标记的解决方案

    在VSCode内用markdown写代码时,出现很多段落标记如下图所示. 开始以为是代码的问题,粘贴了很多次,不行. 把代码放在记事本里,粘贴过来,不行. 敲一段代码试试,也不行. 看来是文件本身出了 ...

  4. 随笔 | 写代码时极有可能面临的焦虑

    随笔 | 写代码时极有可能面临的焦虑 本科学管理,被诸如<市场营销学>这类课程的作业搞得焦头烂额时,就会羡慕学计算机(或更广一点如「工科」)的同学:工程问题,有绝对的标准与尺度:不像这种经 ...

  5. 写代码时尽量少用复制粘贴(ctrl+c, ctrl+v)

    我们在写代码时经常会参考其他人编写的代码或者是从网上搜索查看需要实现的功能用那些代码,这个时候,很多人会很自然的("ctrl+c", "ctrl+v"),简单轻 ...

  6. 在公司写代码时,我总想回家带娃。

    桔妹导读:离天空最近的地方,是父亲的肩膀.在这个特别的日子里,小编也搜集了一些滴滴年轻的工程师奶爸们的分享,听他们聊一聊当爸的初体验.也借此机会祝福所有做了父亲的工程师们,节日快乐! 内心充满激动和紧 ...

  7. 小白用c++画出手枪,写代码时实属不易,请点赞加关注吧!

    大家好,今天屁孩君给大家带来用c++画出手枪写代码时实属不易,请点赞加关注吧! 废话不多说,直接上代码! #include<iostream> using namespace std; i ...

  8. 当我的生活只剩下写代码时

    我对很多事物都充满好奇,很想探究其中的原理及背后的东西. 记得大一那时,想自己做一个网站,于是到图书馆看HTML的书,那时恰好有个关于网站的比赛,于是以此为借口,买了台电脑--更好的借口是为了学习C语 ...

  9. keil写代码时遇到的问题——warning:implicit declaration of function XXXX is invalid in C99

    在用keil4写实验的时候,遇到了如标题所示的警告,warning:implicit declaration of function "XXXX" is invalid in C9 ...

最新文章

  1. Linux16-防火墙与firewalld
  2. Postfix(一):CentOS 下安装postfix
  3. 树莓派镜像源切换之旅.md
  4. 魅影远程监控(企业版)
  5. mfc从mysql中读取数据类型_在MFC中使用SQlite数据库读取数据
  6. table合并单元格宽度自适应
  7. 【Elasticsearch】ES 5.6.4源码解析---translog
  8. 华为摄像头搜索软件_华为Mate 40 Pro评测:硬件和软件表现都近乎完美
  9. bigdecimal 科学计数转普通计数_LoaRunner性能测试教程:Windows计数器(2)
  10. 更改JENKINS主目录
  11. string 转 byte_计算机毕业设计中java实现在线预览poi实现word、excel、ppt转html
  12. 网络安全学习--007--漏洞分析简介
  13. 计算机专业期末试卷分析,计算机期末试卷分析
  14. Microsoft Teams 报错:We‘re sorry-we‘ve run into an issue.
  15. MySQL数据库+jdbc -- 笔记
  16. 前端生成pdf的js库-pdfmake.js的简单使用
  17. 人工神经网络实验项目:论文复现
  18. 哔哩哔哩bilibili 直播间全屏发弹幕
  19. (附源码)ssm教育机构管理系统 毕业设计 010224
  20. 如何使用VLC压缩视频文件

热门文章

  1. LeetCode高频题29. 两数相除:不用加减乘除号,求加法,减法,乘法,除法
  2. 华科软件学院 软件体系结构考试内容回忆
  3. D3.js 饼状图的制作
  4. 40多个优秀的Adobe Illustrator卡通教程
  5. 【QT上位机编写第三步】编写一个电压、电流显示串口上位机
  6. 什么是获客成本 (CAC) 以及如何计算
  7. metalink登陆故障解决!
  8. 基于SSM和Boostrap实现的电影评论网站设计 毕业论文+外文翻译及原文+项目源码
  9. compression-webpack-plugin Gzip压缩
  10. 怎样轻松将SD卡照片数据恢复