C/C++变量定义数组长度问题

有次写C语言忘记了一件事,变量不能定义数组长度,但是我用了之后并没有报错,事后想起来这件事,但是没想通,今天看慕课王数据结构和算法的课程时,发现讲师的代码中也出现了使用变... 有次写C语言忘记了一件事,变量不能定义数组长度,但是我用了之后并没有报错,事后想起来这件事,但是没想通,今天看慕课王数据结构和算法的课程时,发现讲师的代码中也出现了使用变量定义数组长度,一切OK。于是我对c语言和C++分别做了测试,发现都是可以的。之前课本上说的是数组的长度是在编译阶段申请的内存长度。然而。。。。 百度了相似问题之后,有人回答OK,有人回答不OK,争议之处在于“数组的长度是在编译阶段申请的内存长度”。显然,经过测试之后,这是在程序运行过程中动态申请的内存空间。 不解,请专业人士解答。(补充一件事,之前蓝桥杯报名时候我们进行了一次测试,我写的代码在本地运行OK,让别人帮我使用判题系统时候0分,原因就是此处的问题,这个就是第一次遇见这个问题的场景)。 展开
 我来答
White_MouseYBZ
2017-12-03 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6428万
展开全部
前两个图片说的确实是用变量定义数组长度的(后面再说),黑框里的代码就不是了,那是取arr数组的下标为i的值赋给Te——这无论C或C++都是合法的操作。纯C编译器是不允许用变量定义数组长度的,编译都过不了。而后来的有些C++的编译器允许这样做的,但大多数用来做定义数组长度的变量要用const修饰,叫值不变变量,但纯C编译器即使用const修饰的变量也不允许用来定义数组长度。你说的“C和C++”都是允许的可能是你的编译器是C++兼容C的,时下纯C编译器已经很难遇到了……供参考。
追问

不好意思那个他图没截对,这个是慕课的一段代码。  不过现在看应该是gcc/g++对C/C++的编译应该跟以前的不太一样。

oakwood
2017-12-03 · TA获得超过877个赞
知道小有建树答主
回答量:942
采纳率:77%
帮助的人:224万
展开全部
“变量不能定义数组长度”是不准确的,应当是“未经赋值的变量不能定义数组长度”。你给的图1、图2中的n都在数组定义前有赋值;图3没有上下文,仅这一段代码,看不出有任何错误。
至于数组的存储空间分配,可以是静态的(视软件版本不同,有的是编译阶段随代码空间一同分配的,有的是在运行初始阶段由进程向系统预申请的),也可以是动态的(程序运行到指定代码域内,动态申请、动态释放)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
adoqq_bd
2017-12-03 · TA获得超过7050个赞
知道大有可为答主
回答量:1818
采纳率:63%
帮助的人:1592万
展开全部
C99标准确实是允许变长数组的,目前gcc也支持。
但C++标准(目前已经是C++17标准)不支持,因为这个东西风险太大。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shine1991
科技发烧友

2017-12-03 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
可变长数组(VLA)在C99中加入,需要编译器支持C99标准
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式