如果题目中说数组的大小是按输入多少算的,那在定义的时候该怎么定义数组
1条回答 默认 最新
- 黑猫学长呀 2021-12-14 20:59关注
参考例程04element_is_variable_test.c
例子中所有测试代码都是用gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0进行编译的。test1函数是可行的。
但是网上也有人说编译不过,貌似原因在于使用的编译器不一样,听说C99标准支持,有的标准不支持。
test2编译不过,定义int a[num];的时候,num是个不确定的值。
test3/4/5都是可行的。
由此得出结论:
数组元素中个数必须为常量,不能为变量,所述不是很正确,即使是变量也有可能可以。其实其原意应该是数组元素中个数必须是确定,不能是不确定的个数。即使元素个数是个变量,但是只要赋值了,只要是确定的,也是可行的。
但是,网上也有人编译不通过,所以个人认为是和编译器以及支持哪种C标准有关(例如C99/C11/C90...),所以不必要纠结,最好还是不要将数组元素设置为变量,如果换个平台编译,可能就不行了,那么代码的移植性就很差了。// 验证数组元素是不是常量的情况 #include<stdio.h> #include<stdlib.h> //-- 编译成功 void test1() { int num = 10; int a[num]; a[1] = 1; printf("a[1] = %d\n", a[1]); } /* //-- 编译失败 void test2() { int num; int a[num]; num = 10; a[1] = 2; printf("a[1] = %d\n", a[1]); } */ //-- 编译成功 void test3() { const int num = 10; int a[num]; // 数组元素个数不是常量,编译报错 a[1] = 3; printf("a[1] = %d\n", a[1]); } void element_tran(int num) { int a[num]; a[1] = 4; printf("a[1] = %d\n", a[1]); } //-- 编译成功 void test4() { element_tran(10); } void element_tran2(int num) { int a[num]; a[1] = 5; printf("a[1] = %d\n", a[1]); } //-- 编译成功 void test5() { int num; num = 10; element_tran2(num); } void main(int argc, const char *argv[]) { int which_test = 1; if(argc > 1){ which_test = atoi(argv[1]); } switch(which_test){ case 1: test1(); break; case 2: //test2(); break; case 3: test3(); break; case 4: test4(); break; case 5: test5(); break; default: break; } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
- ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
- ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
- ¥15 cmd cl 0x000007b
- ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
- ¥500 火焰左右视图、视差(基于双目相机)
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败