c++ - 字符串作为指针与数组

标签 c++ arrays string pointers constants

<分区>

我想知道以下定义之间的区别是什么:

// file.cpp:
namespace n
{
static char const * const str1 = "hello";
static char const str2[] = "hello";
}

我想要的行为,我认为它们都提供:

  • 它们都引用不可变数据(因为数据是 char consts)
  • 两个变量都不能修改(因为 str1 被定义为 * const 并且因为 str2 是一个数组,不能用作左值?)
  • 它们都有内部链接(通过静态)
  • 它们都有命名空间范围
  • 如果指向任一字符串数据的指针可用于不同的模块(通过此处未指定的某些函数),则这些字符串的内存将有效(str1 因为它指向字符串文字,而 str2 因为数组是在命名空间范围内声明)

是否有语言保证的差异? 如果存在依赖于实现的行为,我如何调查不同平台上的差异?

(对于这个例子,我没有兴趣将这些行为与 std::string 选项进行对比,但如果您认为其他读者会感兴趣,也可以随意谈论它。)

最佳答案

是的,有:一个还是数组,一个是指针。指针和数组不一样。

一个具体方面可能是使用 sizeof 运算符 - 对于指针,它不会导致字符串的长度,在数组上它会(终止 NUL 字符计入当然还有)。

关于c++ - 字符串作为指针与数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17051362/

相关文章:

c++ - 如何正确调用 thiscall 函数,这是一个 mfc 控件

c - 如何检查C中的空数组

java - 输入的第一个数字表示列表java中元素的数量

c# - 查找字符串中第 N 次出现的字符

c++ - g++ 严格溢出、优化和警告

c++ - Tic Tac Toe 失败的 MiniMax 算法

c++ - 如果唯一指针是捕获值,为什么它不能在 lambda 内部移动?

python - NumPy:按 np.array 过滤行

string - 生成字符串的所有覆盖子串

c++ - 如何优化路径列表中的目录列表?