我正在尝试创建一个不带大小的int和float数组(它可能是0,也可能在用户使用程序时递增)
我试图做到以下几点:
int票据[];
浮动总额[];
我无法指定最大大小,因为我正在使用for循环打印每个数组(如果我指定的大小为99,我将打印99行,我不希望这样)
C不支持具有动态元素数的数组。数组的元素数必须在编译时确定,或者因为C99可以在创建时的运行时进行计算。创建阵列后,其大小是固定的,无法更改。在少数情况下,在数组定义或数组声明中,[]之间没有明确指定大小
如果提供初始值设定项,则可以定义一个数组,该数组的最左边维度没有明确的大小。编译器将从初始值设定项推断大小:
inta[]={1,2,3};//等价于int a[3]={1,2,3};
int m[][2]={{1,2},{3,4};//等价于int m[2][2]={{1,2},{3,4};
字符s[]=";“你好”相当于char s[13]=“1”;“你好,世界”;;
请注意编译器如何在字符串大小写中添加隐式null终止符
在多个情况下,您可以声明一个不带最左边维度大小说明符的数组:
- 作为带有
extern类存储的全局变量(数组在别处定义) - 作为函数参数:
intmain(intargc,char*argv[])。在这种情况下,将忽略为最左侧标注指定的尺寸 - 作为具有多个命名成员的
结构的最后一个成员。这是一个称为灵活阵列的C99扩展
编译器没有关于这些数组的实际大小的信息。程序员将使用一些其他信息来确定长度,或者从一个单独的变量,或者从数组内容
对于函数参数,数组作为指针传递,即使指定了元素的数量,sizeof(argv)的计算结果也是指针的大小