aoe*_*oeu 10 c arrays pointers c-strings
这两行代码是否实现了相同的结果?如果我在函数中有这些行,那么在两种情况下字符串都存储在堆栈中吗?除了不需要在第一行代码中声明空终止符之外,我是否应该使用一个而不是另一个?
char s[] = "string";
char* s = "string\0";
Run Code Online (Sandbox Code Playgroud)
Bar*_*nau 24
不,这两行没有达到相同的效果.
char s[] = "string"导致一个7个字节的可修改数组,最初用内容填充's' 't' 'r' 'i' 'n' 'g' '\0'(所有内容都在字符串文字中从运行时复制).
char *s = "string"导致指向包含字符串文字"字符串"的某些只读内存.
如果你想修改你的字符串的内容,那么第一个是唯一的方法.如果您只需要对字符串的只读访问权限,那么第二个将稍微更快,因为不必复制字符串.
在这两种情况下,都不需要在字符串文字中指定空终止符.当遇到结束时,编译器将为您处理".