C语言中未定义大小的数组
我正在使用learn-C.org学习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个以上的值,会发生什么?你可以有一个
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输出完成了!所以我猜是那个网站被弄脏了。。。谢谢菲利佩!