Mat*_*iac -3 c memory arrays char
char txt[20] = "Hello World!\0";
Run Code Online (Sandbox Code Playgroud)
上面的定义分配了多少字节?考虑一个char占用1个字节,一个int2字节.请注意,只有一个",\0最后.如何计算上面定义占用的很多字节?
Statement char txt[20]="Hello World!\0"实际上包括两部分,一个定义部分和一个初始化部分.char txt[20]定义部分告诉编译器保留20个字符大小的元素(在这种情况下为20个字节),而不管稍后用于初始化数组的内容.初始化部分="Hello World!\0"然后用文字字符"预填充"保留的存储器Hello World!\0.请注意,实际上没有必要\0在字符串中显式写入,因为字符串文字本身由\0-character 终止.所以你应该写char txt[20]="Hello World!".如果字符串文字的长度小于分配的内存,则可以.如果用于初始化的字符串文字的长度超过了数组的长度,则至少会得到编译器警告.
但请注意,如果您编写char txt[]="Hello World!",则保留的内存长度将完全是初始字符串文字的长度.
关于阵列初始化,您可以参考cppreference.com.关于"变量定义"与"变量声明"的讨论,我发现这个SO答案非常有用.