【发布时间】:2015-10-12 02:34:13
【问题描述】:
更新:
我认为这个问题与标记为可能重复的问题明显不同,因为我使用了关键字“const”。标记为重复的答案不能充分解释 const 在这些情况下的含义。在我看来, const 应该强制编译器将这两种情况同等对待,即使没有 const 它们是不同的。有关详细信息,请参阅我的问题下方的评论。
const char myStr[] = "hello" 和 const char* myStr = "hello" 有什么区别?
当我编译前者时,编译后的程序大小比后者多 20 个字节更多,尽管这两种情况为全局变量占用相同数量的空间。编译器优化设置为“-Os”。
更新:
-就编译后的程序大小而言,static const char myStr[] = "hello" 与const char* myStr = "hello" 相同,这与去掉变量并直接将字符串文字"hello" 作为参数传递给函数相同。 const char myStr[] = "hello" 比刚才提到的其他情况多占用 20 个字节。 char myStr[] = "hello" 的程序大小与其“const”对应项相同。
我将此字符串传递给我编写的函数,该函数需要const char str[] 作为输入参数。
第 2 部分:需要 const char str[] 作为输入参数的函数是否与需要 const char* str 作为输入参数的函数相同?
相关(但不相同)问题
【问题讨论】:
-
第 1 部分:您已经链接到几个回答它的答案...
-
第 1 部分:我的链接似乎不太正确地回答它。他们基本上说后者 (char*) 是指向无法修改的字符串文字的指针,而前者 (char str[]) 是 可以 修改的字符数组。但这没有意义。如果我将它们都设为“const”,我不明白为什么编译器不认为它们 both 不能被修改,并将
const char str[]版本与const char* str版本相同。 -
const char myStr[] = "你好"。 myStr 是一种 6 大小的 char 数组。对于 const char* myStr = "hello",myStr 是 char 类型的指针(大小可以是 4bytes 或 8bytes)。检查cpp.sh/4gzr
-
const char *myStr = "Hello";基本上是指static const char Hello_string[] = "Hello"; const char *myStr = &Hello_string[0];
标签: c++ string pointers arduino