Sha*_*ang 2 c arrays string initialization
我很好奇在C中创建字符数组的不同方法.假设我们想创建一个包含字符串的字符数组"John Smith".我们可以通过显式提供元素数来初始化数组,即
char entireName[11] = "John Smith";
Run Code Online (Sandbox Code Playgroud)
其中有四个空格用于字符J- o- h- n,一个用于空格,五个用于S- m- i- t- h,一个用于字符串终止符\0.
您也可以通过简单地键入来完成上述操作
char entireName[] = "John Smith";
Run Code Online (Sandbox Code Playgroud)
编译这两个字符数组的人会有很大差异吗?是否为这两个表达式分配了相同的内存量,并以相同的速度执行?
有什么区别?
两者都相同,但第二个是可取的.
如果在定义和初始化期间遗漏了数组的大小,编译器将分配所需的适当大小.与有时固定大小的定义相比,这更不容易出错
\0.事实仍然是,如果您启用了适当的警告,如果您执行上述操作,您将收到警告,但使用第二种方法时,不会出现这些情况,因此不必担心.
编辑:
FWIW,在第二种情况下,数组长度将根据提供的初始化字符串长度决定.众所周知,编译器时间字符串不能在运行时调整大小,因此这是第二种方法的唯一可能限制.如果在后面的部分中,您希望数组保存的内容大于提供的初始化字符串的大小,则第二种方法不合适.