如何在不使用C声明大小的情况下创建数组?

我正在尝试创建一个不带大小的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)的计算结果也是指针的大小

发表评论