首先,两者都有明显的不同:
- 第一个创建一个指针.
- 第二个创建一个array.
请继续阅读以获得更详细的解释:
数组版本:
char text[] = "text";
创建一个足以容纳字符串文字"text"的数组,包括它的NULL
个结束符.数组text
用字符串文字"text".The array can be modified at a later time初始化.此外,即使在编译时,数组的大小也是已知的,因此102 operator can be used to determine its size.
指针版本:
char *text = "text";
创建指向字符串文字"文本"的指针.这比数组版本but string pointed by the pointer should not be changed快,因为它位于只读实现定义的内存中.修改这样的字符串文字将导致Undefined Behavior.
事实上,C++03不赞成使用不带const
关键字的字符串文字.因此,宣言应该是:
const char*text = "text";
另外,因为sizeof
运算符只会给出指针变量的大小,所以您需要need to use the 100 function, and not 101 to find size of the string.
哪个版本更好?
取决于用法.
- 如果不需要对字符串进行任何更改,请使用指针版本.
- 如果要更改数据,请使用数组版本.
编辑:我刚刚注意到(在 comments 中)OP寻求以下各项之间的区别:
const char text[]
和const char* text
除了关于修改字符串文字的那一点外,上述不同点仍然适用.对于const
限定符,数组test
现在是一个包含const char
类型元素的数组,这意味着它们不能被修改.
考虑到这一点,我会 Select 数组版本而不是指针版本,因为指针可以(错误地)轻松地重新定位到另一个指针,并且可以通过另一个指针修改字符串,从而生成一个UB.