C++中的数据类型

news/2024/10/13 22:18:52

C++ 中的数据类型分为四大类:基本数据类型派生数据类型用户定义的数据类型空类型。每类都有特定的用途和特性。

1. 基本数据类型(Built-in Data Types)

这是 C++ 中最基本的数据类型,包含整数、浮点数、字符和布尔类型。

  • 整数类型(Integer Types)

    • int:标准整数类型。
    • short int 或 short:较小的整数类型。
    • long int 或 long:较大的整数类型。
    • long long int 或 long long:更大的整数类型(C++11 引入)。
    • unsigned int:无符号整数,不能表示负数,值域范围变大。
  • 浮点类型(Floating-point Types)

    • float:单精度浮点数。
    • double:双精度浮点数,精度比 float 更高。
    • long double:扩展精度浮点数。
  • 字符类型(Character Type)

    • char:用于存储单个字符(实际上是整数类型)。
  • 布尔类型(Boolean Type)

    • bool:只包含 true 或 false 两个值。

2. 派生数据类型(Derived Data Types)

派生数据类型是从基本数据类型中构建的。

  • 数组(Arrays):存储一系列相同类型的元素。
    int arr[10];  // 定义一个存储 10 个整数的数组
    
  • 指针(Pointers):存储另一个变量的地址。
    int* ptr;  // 定义一个指向整数的指针
    
  • 函数(Functions):函数类型指定返回类型及参数类型。
    int func(int a, float b);  // 返回 int,接受 int 和 float 参数
    
  • 引用(References):是变量的别名。
    int x = 10;
    int& ref = x;  // ref 是 x 的引用
    

3. 用户定义的数据类型(User-defined Data Types)

用户可以根据需求定义自己的数据类型。

  • 类(Classes):类是 C++ 中面向对象编程的核心,定义对象的行为和属性。
    class MyClass {public:int myVar;
    };
    
  • 结构体(Structures):类似类,但成员默认为公有(public)。
    struct MyStruct {int x;float y;
    };
    
  • 联合体(Unions):用于同一内存位置存储不同的数据类型。
    union MyUnion {int i;float f;
    };
    
  • 枚举(Enumerations):定义一组常量。
    enum Color { Red, Green, Blue };
    

4. 空类型(Void Type)

  • void:表示函数无返回值或无参数。
    void func();  // 无返回值的函数
    

此外,C++ 还支持 C++11 及以上标准引入的类型,如 auto 自动推断类型、nullptr 表示空指针以及 decltype 用于声明类型等。

在 C++ 中,数据类型的大小取决于编译器和硬件平台的实现。以下是常见数据类型在大多数 32 位或 64 位系统上的典型大小。请注意,这些大小是常见的,但在不同的平台上可能有所不同。

1. 基本数据类型的大小

  • char: 1 字节(8 位),用于存储单个字符或小整数。

  • bool: 1 字节(尽管只需要 1 位,通常用 1 字节来存储)。

  • int: 通常是 4 字节(32 位),这可以在 32 位和 64 位系统上相同。

  • short int / short: 2 字节(16 位)。

  • long int / long: 通常是 4 字节(32 位),但在某些 64 位系统上也可能是 8 字节。

  • long long int / long long: 8 字节(64 位),从 C++11 开始引入,用于表示更大的整数。

  • unsigned 类型: 与对应的有符号类型相同。例如,unsigned int 通常也是 4 字节。

  • 浮点类型:

    • float: 4 字节(32 位),单精度浮点数。
    • double: 8 字节(64 位),双精度浮点数。
    • long double: 通常是 8 字节(64 位),但有些系统上可能为 12 字节或 16 字节(如 x86 平台上的扩展精度格式)。

2. 派生数据类型的大小

  • 数组: 数组的大小是其元素大小乘以元素个数。例如,int arr[10] 的大小是 sizeof(int) * 10
  • 指针: 在 32 位系统上,指针的大小是 4 字节;在 64 位系统上,指针的大小通常是 8 字节。
  • 函数: 函数本身没有“大小”,但指向函数的指针与普通指针具有相同的大小(4 字节或 8 字节)。

3. 用户定义的数据类型的大小

  • 结构体(struct): 结构体的大小是所有成员大小的总和,加上必要的内存对齐。如果结构体中存在不同类型的数据,编译器通常会插入填充字节以确保数据正确对齐。

    struct MyStruct {char a;  // 1 byteint b;   // 4 bytes (with possible padding for alignment)
    };
    

    在这种情况下,MyStruct 的大小可能是 8 字节(char 1 字节,int 4 字节,加上 3 字节的填充)。

  • 类(class): 类的大小与结构体相似,但如果类有虚函数,则需要额外的空间来存储虚函数表指针(通常为 4 字节或 8 字节)。

  • 联合体(union): 联合体的大小是其中最大成员的大小。因为在联合体中,所有成员共用同一块内存。

  • 枚举(enum): 枚举类型通常与 int 大小相同(4 字节),但这可以根据枚举的实际值的范围来调整。

4. 空类型(void)

  • void: 没有大小,因为它不存储任何数据。

示例代码:查看数据类型的大小

你可以使用 sizeof 运算符来查看每种数据类型在特定平台上的实际大小:

#include <iostream>
using namespace std;int main() {cout << "Size of char: " << sizeof(char) << " bytes\n";cout << "Size of int: " << sizeof(int) << " bytes\n";cout << "Size of short: " << sizeof(short) << " bytes\n";cout << "Size of long: " << sizeof(long) << " bytes\n";cout << "Size of long long: " << sizeof(long long) << " bytes\n";cout << "Size of float: " << sizeof(float) << " bytes\n";cout << "Size of double: " << sizeof(double) << " bytes\n";cout << "Size of long double: " << sizeof(long double) << " bytes\n";cout << "Size of bool: " << sizeof(bool) << " bytes\n";return 0;
}

典型输出示例(在 64 位系统上):

Size of char: 1 bytes
Size of int: 4 bytes
Size of short: 2 bytes
Size of long: 8 bytes
Size of long long: 8 bytes
Size of float: 4 bytes
Size of double: 8 bytes
Size of long double: 16 bytes
Size of bool: 1 bytes

结论

  • char 总是 1 字节。
  • 整数类型 (intshortlonglong long) 的大小依赖平台。
  • 浮点类型 (floatdoublelong double) 通常为 4 字节、8 字节或更大。
  • 指针的大小取决于系统架构(32 位或 64 位)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71238.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

任务3

导入照片:在照片编辑软件(如 Photoshop、GIMP 或 Canva)中打开要添加水印的照片。 创建文本图层:创建一个新的文本图层,用于存放水印文字。 输入水印文本:在文本图层中输入您的水印文本。您可以调整字体、大小、颜色和透明度。 调整位置:将水印文本放置在照片中的合适位…

[转]深度学习下的相机标定

相机标定在计算机视觉和机器人等领域中占据举足轻重的地位,它为后续场景理解及决策推断提供了标准化的成像空间和精准的几何先验。然而,传统的相机标定技术常常依赖于繁琐的人工干预和特定的场景假设,因此难以灵活拓展至不同的相机模型和标定场景。 近年来,基于深度学习的解…

标题、导航、目录添加序号

在主题文件夹添加base.user.css文件,把下面的内容复制进去。/*************************************** Header Counters in Content**************************************//** initialize css counter */ #write {counter-reset: h1 }h1 {counter-reset: h2 }h2 {counter-r…

qt深入解析

1.Qt IO 设备类型:顺序存储设备:如网卡。。 随机存储设备:如.txt..Qt中IO设备继承图 Qt中的文件系统 通用开发库,跨平台 QIODevice IO父类,提供字节块读写通用操作和基本接口 QFileDevice提供文件操作通用实现 QFile访问本地文件或嵌入资源 QTemporayFile创建和访问本地系…

安装WSL2

1.简介 SWL2是windows平台上的linux系统,有一定的优点和限制,最差的一点就是网络了,只能使用NAT相似的技术,不能完全替代虚拟机. 官网资料很详细了,也不是太多,这里只是提供快速入门. 2.初始安装 2.1.打开虚拟平台和WSL2.2.installl wsl2 #1.设置wsl版本 PS C:\Users\pc> ws…