Sizeof字符串文字

CsT*_*mas 46 c++ string sizeof

以下代码

#include <iostream>    
using namespace std;

int main()
{
    const char* const foo = "f";
    const char bar[] = "b";
    cout << "sizeof(string literal) = " << sizeof( "f" ) << endl;
    cout << "sizeof(const char* const) = " << sizeof( foo ) << endl;
    cout << "sizeof(const char[]) = " << sizeof( bar ) << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出

sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2
Run Code Online (Sandbox Code Playgroud)

在32位操作系统上,使用GCC编译.

  1. 为什么要sizeof计算字符串文字的长度(所需空间)?
  2. 当给出时,字符串文字是否具有不同的类型(来自char*或char [])sizeof

Jon*_*ler 110

  1. sizeof("f") 必须返回2,一个用于'f',一个用于终止'\ 0'.
  2. sizeof(foo) 因为foo是指针,所以在32位机器上返回4,在64位机器上返回8
  3. sizeof(bar) 返回2因为bar是两个字符的数组,'b'和终止'\ 0'.

字符串文字的类型为'char的大小为N的数组',其中N包含终止null.

请记住,传递给数组时,数组不会衰减为指针const char.

  • +1,但类型实际上是'N个const字符的数组'(const不是可选的) (12认同)
  • @JonathanLeffler ......最好的正确,特别是在编程方面 (12认同)
  • @dribeas:是的; 我忽略了预选赛,但你是迂腐的. (5认同)

Mic*_*kis 13

sizeof返回其操作数的大小(以字节为单位).这应该回答问题编号1.;)此外,传递给字符串文字时,类型为"array to n const char" sizeof.

您的测试用例,一个接一个:

  • "f"是一个字符串文字,由两个字符组成,即字符f和终止NUL.
  • foo 是一个指针(编辑:无论限定符),并且指针似乎在您的系统上长4个字节.
  • 对于bar这种情况是一样的"f".

希望有所帮助.

  • @Matthew:不,数组和指针“不能”互换。只要需要指针,就可以传递数组,因为它“衰减”为指针。但只要类型是数组,它就与指针不同。 (2认同)