首页 > 编程语言 >C++中的数据类型

C++中的数据类型

时间:2024-10-13 22:11:36浏览次数:7  
标签:字节 int 数据类型 long 大小 C++ 类型

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 byte
      int 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 位)。

标签:字节,int,数据类型,long,大小,C++,类型
From: https://www.cnblogs.com/chentiao/p/18463113

相关文章

  • C++中unsigned符号使用
    unsigned 是一种修饰符,用来表示无符号的整数类型。无符号类型只能存储非负数,因此与有符号类型相比,它能够表示更大的正整数范围。使用 unsigned 的常见场景在表示只有非负数的场景中,如计数器、索引、内存地址等。提高正整数的表示范围,比如当需要存储比有符号类型更大的正数......
  • 实验1 现代c++编程初体验
    实验任务一task1.cpp1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参6#include<iostream>7#include<string>8#includ......
  • 实验1 C++
    task1:代码:1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>9#......
  • python与C++的一些区别以及一些新的东西
    目录第一个Python程序输入与输出Python基础数据类型和变量字符串和编码使用list和tuple条件判断模式匹配循环使用dict和set第一个Python程序输入与输出Python基础数据类型和变量字符串和编码第一行代码的输出如下解释如下:'%2d-%02d'是格式化字......
  • [C++][第三方库][ODB]详细讲解
    目录1.介绍2.安装1.安装build22.安装odb-compiler3.安装ODB运行时库4.安装MySQL和客户端开发包5.安装boostprofile库6.总体操作7.测试样例3.ODB常见操作1.ODB类型映射2.ODB编程1.指令2.示例4.类与接口5.使用1.介绍ODB框架:数据库ORM框架-->对象关系映......
  • 186道C++面试八股文(答案、分析和深入提问)整理
    1.全局变量和局部变量有什么区别?操作系统和编译器是怎么知道的?回答全局变量和局部变量在C++中有几个主要的区别:1.作用域(Scope)全局变量:定义在所有函数外部,可以在所有函数和代码块中访问。其作用域是整个程序,直至程序结束。局部变量:定义在函数或代码块内部,只能在该函......
  • c++实验1
    实验1://现代C++标准库、算法库体验//本例用到以下内容://1.字符串string,动态数组容器类vector、迭代器//2.算法库:反转元素次序、旋转元素//3.函数模板、const引用作为形参#include<iostream>#include<string>#include<vector>#include<algorithm>usin......
  • MySQL中的数据类型有哪些?如何选择合适的数据类型来优化性能?
    MySQL中的数据类型丰富多样,它们主要分为以下几大类,并且每一类中又包含多种具体的数据类型:整数类型:包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT等,这些类型用于存储整数值,其范围和存储大小各不相同。例如,TINYINT占用1个字节,而BIGINT则占用8个字节。浮点数和定点数类型:FLO......
  • 【C++】list(STL)
    list的介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于......
  • C++之multimap:关键字分类的利器
    目录1.引言2.主要特点3.成员函数4.使用实例 5.注意事项1.引言        在C++中,multimap是标准模板库(STL)中的一个关联容器,它存储键值对(key-valuepairs),并且允许键的重复。multimap内部通常通过红黑树(或其他平衡二叉搜索树)实现,这保证了元素按照键的顺序进行存储......