C中未定义的大小数组

时间:2014-05-22 15:43:27

标签: c arrays

我正在使用learn-c.org学习C,而在this page它说我可以使用

char name[] = "John"

在页面底部框架的自己的示例中,如果我这样做

char last_name[] = "Doe"

没有报告错误,但程序无法运行。它只会在我char last_name[4]或更高的情况下运行...所以问题:

可以声明一个没有大小的数组,还是我需要知道数组将保存的最大值?那么第二个问题,如果我int array[10],如果我需要超过10个值会发生什么?

2 个答案:

答案 0 :(得分:1)

  

可以声明一个没有大小的数组,或者我是否需要知道最大值   数组将保存的值?

取决于您是否初始化它。初始化时,编译器将为您计算元素。所以,这是有效的:

int a[] = { 0, 1, 2, 3 };

这有效地创建了一个包含4个元素的数组。如果提供大小初始化数组,那么如果大小大于元素数,则相应地初始化第一个元素,并将其余元素初始化为其默认初始化值(0对于整数,null用于指针等。)。

如果尺寸小于元素数量,则表示错误。

如果您没有初始化,则必须声明大小。

有了这个:

char last_name[] = "Doe";

编译器创建一个包含4个字符的数组(其中一个是空终止符)。

  

如果我做int array [10],如果我需要超过10,会发生什么   值?

你无能为力。如果您需要超过10个,则需要更大的阵列。

答案 1 :(得分:-2)

你可以拥有一个固定大小的数组或一个指向数组的指针(以*开头),它可以有任何大小(最大限度)。

至于第二个问题,当数组离开它的边界时程序会崩溃。