【发布时间】:2015-04-28 13:29:51
【问题描述】:
1. char *names[5]={"Web","Security","Software","Hello","Language"};
2. char names[5][30]={"Web","Security","Software","Hello","Language"};
这两者有什么区别?
我知道的是(1.)第一个可以有所需长度的字符串,而(2.)第二个可以有 29 个字符的字符串,带有 '\0'
但我很困惑,将它们传递给函数以及如何传递它们有什么区别?
请详细说明我是 C++ 新手 ....
【问题讨论】:
-
第一个没有编译,因为字符串文字是
const。 -
第一个分配
5 * sizeof(char*)字节并在每个索引处存储一个指针,而第二个分配5 * 30字节并将您的字符串保存在那里。附言那是 C。 -
警告:不推荐将字符串常量转换为 'char*' [-Wwrite-strings]|它编译了,但有这个警告,你能解释一下昆汀吗
-
C++ 标准不允许指向没有 const 的字符串字面量。 stackoverflow.com/questions/14570993/…
-
@CodeLearner 这是与旧 C 标准的剩余兼容性规则,它没有
const。在任何情况下,都禁止修改字符串文字(并且通常会崩溃),因此最好将其声明为const并让编译器发现任何误用。