如何在C++中确定特定数据类型的内存大小?

在 C++ 中主要用 sizeof 运算符 获取数据类型/变量占用的内存字节数,下面分用法、示例、细节说明。


一、核心:sizeof 运算符

1. 基本语法

// 1. 作用于【数据类型】,必须加括号
sizeof(类型名)

// 2. 作用于【变量】,括号可省略
sizeof(变量名)
sizeof 变量名

返回值size_t 类型(无符号整型),代表占用字节数


二、完整代码示例

#include <iostream>
// 如需固定宽度类型可引入
#include <cstdint>

using namespace std;

int main()
{
    // 1. 基础类型大小
    cout << "bool:          " << sizeof(bool) << endl;
    cout << "char:          " << sizeof(char) << endl;
    cout << "short:         " << sizeof(short) << endl;
    cout << "int:           " << sizeof(int) << endl;
    cout << "long:          " << sizeof(long) << endl;
    cout << "long long:     " << sizeof(long long) << endl;
    cout << "float:         " << sizeof(float) << endl;
    cout << "double:        " << sizeof(double) << endl;
    cout << "long double:   " << sizeof(long double) << endl;

    // 2. 无符号类型
    cout << "unsigned int:  " << sizeof(unsigned int) << endl;

    // 3. C++11 定长整型
    cout << "int64_t:       " << sizeof(int64_t) << endl;

    // 4. 变量用法
    int a = 10;
    double b = 3.14;
    cout << "变量a(int):    " << sizeof(a) << endl;
    cout << "变量b(double): " << sizeof b << endl; // 省略括号写法

    // 5. 指针大小(区分32/64位系统)
    int* p = nullptr;
    cout << "指针:          " << sizeof(p) << endl;

    return 0;
}

三、关键知识点

1. 常量/表达式的 sizeof

sizeof 不会执行表达式,只判断类型:

int x = 0;
sizeof(x++);  // x 不会自增,仅计算 int 大小

2. 数组的 sizeof

  • 数组名使用:得到整个数组总字节数
  • 数组指针使用:只得到指针大小
int arr[5];
cout << sizeof(arr);    // 20(5个int,每个4字节)

int *p = arr;
cout << sizeof(p);     // 4 / 8(取决于系统位数)

3. 字符串字面量

cout << sizeof("abc");  // 4,末尾隐含 '\0' 结束符

4. 结构体 / 类(内存对齐)

结构体大小不一定等于成员之和,编译器会做内存对齐

struct Test {
    char c;
    int  i;
};
cout << sizeof(Test); 
// 通常结果:8 而非 5(对齐规则)

四、补充说明

  1. sizeof 是运算符,不是函数
    仅作用于类型名时必须写括号;作用于变量可省略括号。
  2. 平台差异
    longlong double、指针的大小在 32 位 / 64 位 Windows/Linux 下结果不同,sizeof 会自动适配当前运行平台。
  3. 输出类型提醒
    sizeof 返回 size_t,搭配 cout 可直接输出;若用 printf,格式符用 %zu
size_t s = sizeof(int);
printf("int 大小:%zu\n", s);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值