56

以下代码

#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. 字符串文字是否具有不同的类型(来自 char* 或 char[])sizeof
4

2 回答 2

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

字符串文字的类型为 'array of size N of const char',其中 N 包括终端 null。

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

于 2009-09-08T05:56:21.847 回答
14

sizeof返回其操作数的大小(以字节为单位)。这应该回答第 1 个问题。;)此外,当传递给sizeof.

您的测试用例,一一:

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

希望有帮助。

于 2009-09-08T05:53:10.477 回答