Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中未定义大小的数组_C_Arrays - Fatal编程技术网

C语言中未定义大小的数组

C语言中未定义大小的数组,c,arrays,C,Arrays,我正在使用learn-C.org学习C,上面写着我可以使用 char name[] = "John" 在页面底部框架上的示例中,如果我这样做 char last_name[] = "Doe" 没有报告错误,但程序不会运行。只有当我使用char last\u name[4]或更大的字符时,它才会运行。。。因此,问题是: 数组是否可以在没有大小的情况下声明,或者我是否需要知道数组将容纳的最大值?第二个问题是,如果我做了int-array[10],如果我需要10个以上的值,会发生什么?你可以有一个

我正在使用learn-C.org学习C,上面写着我可以使用

char name[] = "John"
在页面底部框架上的示例中,如果我这样做

char last_name[] = "Doe"
没有报告错误,但程序不会运行。只有当我使用
char last\u name[4]
或更大的字符时,它才会运行。。。因此,问题是:


数组是否可以在没有大小的情况下声明,或者我是否需要知道数组将容纳的最大值?第二个问题是,如果我做了
int-array[10]
,如果我需要10个以上的值,会发生什么?

你可以有一个固定大小的数组,也可以有一个指向数组的指针(以*)可以有任何大小(不超过它的限制)

至于第二个问题,当数组超出其边界时,程序将崩溃

数组是否可以在没有大小的情况下声明,或者我是否需要知道最大值 数组将保存的值

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

int a[] = { 0, 1, 2, 3 };
这将有效地创建一个由4个元素组成的数组。如果提供大小并初始化数组,则如果大小大于元素数,则会相应地初始化第一个元素,并将其余元素初始化为其默认初始化值(0表示整数,null表示指针等)

如果大小小于元素数,则为错误

如果不初始化,则必须声明大小

为此:

char last_name[] = "Doe";
编译器创建一个包含4个字符的数组(其中一个是空终止符)

如果我使用int-array[10],如果我需要超过10,会发生什么 价值观


你什么都不能做。如果需要10个以上的数组,则需要更大的数组。

请发布为此编写的代码。在learn-c链接页面上,我将第4行和第5行的注释替换为:char*first_name=“John”;char last_name[]=“Doe”;但这不起作用,只有以下几项起作用:char*first_name=“John”;char last_name[4]=“Doe”;数组总是用大小声明的,但您不必总是在源代码中详细说明大小。@GavinBurke它可以工作。您一定是在键入时意外删除了一些字符。我让它在自己的机器上工作,需要包含字符串。然后h需要第三个参数来strncmp,现在“char last_name[]”可以工作(ofc带有a=;),所以对于我来说,要声明一个没有大小的数组,我使用char*name?这是错误的。指向数组的指针不能指向任何大小的数组。指向数组的指针与其大小有关。例如,指向10个整数数组的指针的类型为
int(*)[10]
。也许您想说,当在编译时数组大小未知时,指向动态内存的指针可以用作数组的替代方法。如果上述情况属实,则my char name[]=“John”因此,应该自己计算,而不是在我的printf输出上什么都不显示…?@GavinBurke请显示您的代码,这样我们就可以看到哪里出了问题。@GavinBurke您确定您用
终止了该声明吗?您一直在谈论
char name[]=“John”
,但它应该是
char name[]=“John”我刚刚尝试在我的电脑上而不是在那个网站上,它工作了,我的.exe输出完成了!所以我猜是那个网站被弄脏了。。。谢谢菲利佩!