Sizeof字符串文字

时间:2009-09-08 05:47: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;
}

输出

sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2

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

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

2 个答案:

答案 0 :(得分:103)

  1. sizeof("f")必须返回2,一个用于'f',另一个用于终止'\ 0'。
  2. sizeof(foo)在32位计算机上返回4,在64位计算机上返回8,因为foo是指针
  3. sizeof(bar)返回2,因为bar是两个字符的数组,'b'和终止'\ 0'。
  4. 字符串文字的类型为'char的大小为N的数组',其中N包含终端null。

    请记住,传递给sizeof时,数组不会衰减为指针。

答案 1 :(得分:13)

sizeof返回其操作数的字节大小。这应该回答问题1;;)此外,当传递给sizeof时,字符串文字的类型为“array to n const char”。

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

  • "f"是由。组成的字符串文字 两个字符,字符f和终止 NUL。
  • foo是一个指针(编辑:无论限定符如何),并且系统上的指针似乎长达4个字节..
  • 对于bar,案例与"f"相同。

希望有所帮助。