C++中数组与字符串指针的大小

IR-*_*x86 0 c++ arrays string sizeof c++11

string a= "Stack Overflow";
char b[]= "Stack Overflow";
cout<<sizeof(a)<<","<<sizeof(b)<<endl;
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是4,15
因为'a'指向字符串,所以它的大小是我机器上字符串的大小.

'b'也是指向字符串的指针,但为什么它的大小为15(即sizeof("Stack Overflow"))?

R S*_*ahu 6

由于'a'指向字符串,因此它的大小为我机器上字符串的大小.

不完全是.

a 是一个字符串.它不是指针,因此不指向字符串.string您的设置的实现sizeof(string)是4.

'b'也是指向字符串的指针,但为什么它的大小为15(即sizeof("Stack Overflow"))?

不对.

b不是指向字符串的指针.这是一个数组char.这条线

char b[]= "Stack Overflow";
Run Code Online (Sandbox Code Playgroud)

相当于:

char b[15]= "Stack Overflow";
Run Code Online (Sandbox Code Playgroud)

编译器推断出数组的大小并创建一个正确大小的数组.