字符串作为指针与数组

use*_*255 3 c++ arrays string pointers const

我想知道以下定义之间的差异:

// file.cpp:
namespace n
{
static char const * const str1 = "hello";
static char const str2[] = "hello";
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

小智 5

是的,有:一个仍然是一个数组,另一个是指针.指针和数组不一样.

一个特定的方面可能是sizeof运算符的使用- 对于指针,它不会导致字符串的长度,它将在数组上(当然也可以计算终止NUL字符).