c++ - Sizeof 字符串字面量

标签 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[])?

最佳答案

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

字符串字面量的类型为“const char 大小为 N 的数组”,其中 N 包括终端 null。

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

关于c++ - Sizeof 字符串字面量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1392200/

相关文章:

c++11 线程、SFML 和 code::blocks

c - 如何找到数组的大小(从指向数组第一个元素的指针)?

c++ - 在 SFINAE 上下文中使用的表达式中使用的 static_assert

c++ - 说真的, copy-and-swap 习语真的应该如何工作!我的代码失败

r - 在变量中搜索字符串并返回匹配的字符串

iphone - 在第二个 View 上更改字符串变量会出错

c++ - C++ getline添加空格

c - 为什么标准禁止将 sizeof 应用于函数

c++ - 什么决定了 C 中整数的大小?

c++ - 静态库中可用的二进制变量消失