C/C++变量定义数组长度问题
有次写C语言忘记了一件事,变量不能定义数组长度,但是我用了之后并没有报错,事后想起来这件事,但是没想通,今天看慕课王数据结构和算法的课程时,发现讲师的代码中也出现了使用变...
有次写C语言忘记了一件事,变量不能定义数组长度,但是我用了之后并没有报错,事后想起来这件事,但是没想通,今天看慕课王数据结构和算法的课程时,发现讲师的代码中也出现了使用变量定义数组长度,一切OK。于是我对c语言和C++分别做了测试,发现都是可以的。之前课本上说的是数组的长度是在编译阶段申请的内存长度。然而。。。。 百度了相似问题之后,有人回答OK,有人回答不OK,争议之处在于“数组的长度是在编译阶段申请的内存长度”。显然,经过测试之后,这是在程序运行过程中动态申请的内存空间。 不解,请专业人士解答。(补充一件事,之前蓝桥杯报名时候我们进行了一次测试,我写的代码在本地运行OK,让别人帮我使用判题系统时候0分,原因就是此处的问题,这个就是第一次遇见这个问题的场景)。
展开
展开全部
前两个图片说的确实是用变量定义数组长度的(后面再说),黑框里的代码就不是了,那是取arr数组的下标为i的值赋给Te——这无论C或C++都是合法的操作。纯C编译器是不允许用变量定义数组长度的,编译都过不了。而后来的有些C++的编译器允许这样做的,但大多数用来做定义数组长度的变量要用const修饰,叫值不变变量,但纯C编译器即使用const修饰的变量也不允许用来定义数组长度。你说的“C和C++”都是允许的可能是你的编译器是C++兼容C的,时下纯C编译器已经很难遇到了……供参考。
展开全部
“变量不能定义数组长度”是不准确的,应当是“未经赋值的变量不能定义数组长度”。你给的图1、图2中的n都在数组定义前有赋值;图3没有上下文,仅这一段代码,看不出有任何错误。
至于数组的存储空间分配,可以是静态的(视软件版本不同,有的是编译阶段随代码空间一同分配的,有的是在运行初始阶段由进程向系统预申请的),也可以是动态的(程序运行到指定代码域内,动态申请、动态释放)。
至于数组的存储空间分配,可以是静态的(视软件版本不同,有的是编译阶段随代码空间一同分配的,有的是在运行初始阶段由进程向系统预申请的),也可以是动态的(程序运行到指定代码域内,动态申请、动态释放)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C99标准确实是允许变长数组的,目前gcc也支持。
但C++标准(目前已经是C++17标准)不支持,因为这个东西风险太大。
但C++标准(目前已经是C++17标准)不支持,因为这个东西风险太大。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可变长数组(VLA)在C99中加入,需要编译器支持C99标准
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询