- C++
sizeof是 C 和 C++ 中的一个操作符
- 2024-12-28 18:54:05 @
-
基本概念
sizeof
是C和C++ 中的一个操作符,它用于获取数据类型或者变量所占用的字节数。字节数的大小取决于编译器和目标平台,例如在32位系统和64位系统中,一些数据类型的字节数可能会不同。
-
语法格式
sizeof(类型名)
或者sizeof(变量名)
。- 例如:
sizeof(int)
可以获取int
类型占用的字节数;sizeof(myVariable)
可以获取变量myVariable
占用的字节数。
-
用于基本数据类型
- 整数类型
- 在大多数32位系统中,
sizeof(char)
通常是1字节,因为char
类型用于存储单个字符。sizeof(int)
一般是4字节,int
类型用于存储整数。sizeof(long)
可能是4字节或者8字节,具体取决于编译器和系统。例如:
#include <iostream> int main() { std::cout << "sizeof(char): " << sizeof(char) << " bytes" << std::endl; std::cout << "sizeof(int): " << sizeof(int) << " bytes" << std::endl; std::cout << "sizeof(long): " << sizeof(long) << " bytes" << std::endl; return 0; }
- 在大多数32位系统中,
- 浮点数类型
sizeof(float)
在大多数系统中是4字节,用于存储单精度浮点数;sizeof(double)
通常是8字节,用于存储双精度浮点数。例如:
#include <iostream> int main() { std::cout << "sizeof(float): " << sizeof(float) << " bytes" << std::endl; std::cout << "sizeof(double): " << sizeof(double) << " bytes" << std::endl; return 0; }
- 指针类型
- 在32位系统中,指针类型(如
int*
、char*
等)通常占用4字节,因为32位地址空间可以用4字节来表示内存地址。在64位系统中,指针类型一般占用8字节,因为64位地址空间需要8字节来表示内存地址。例如:
#include <iostream> int main() { int* ptr; std::cout << "sizeof(int*): " << sizeof(int*) << " bytes" << std::endl; char* charPtr; std::cout << "sizeof(char*): " << sizeof(char*) << " bytes" << std::endl; return 0; }
- 在32位系统中,指针类型(如
- 整数类型
-
用于数组
- 当
sizeof
用于数组时,它返回整个数组所占用的字节数。对于一维数组,计算公式是sizeof(数组名)=数组元素类型占用字节数×数组元素个数
。例如:
#include <iostream> int main() { int arr[] = {1, 2, 3, 4, 5}; std::cout << "sizeof(arr): " << sizeof(arr) << " bytes" << std::endl; std::cout << "Number of elements in arr: " << sizeof(arr)/sizeof(arr[0]) << std::endl; return 0; }
- 这里
sizeof(arr)
返回整个数组占用的字节数,sizeof(arr[0])
返回数组中单个元素(这里是int
类型)占用的字节数,通过sizeof(arr)/sizeof(arr[0])
可以计算出数组元素的个数。
- 当
-
用于结构体和联合体
- 结构体
- 对于结构体,
sizeof
返回结构体对象所占用的总字节数。结构体的大小可能会受到对齐方式(alignment)的影响。例如:
#include <iostream> struct MyStruct { int a; char b; }; int main() { std::cout << "sizeof(MyStruct): " << sizeof(MyStruct) << " bytes" << std::endl; return 0; }
- 这里
MyStruct
结构体包含一个int
类型成员和一个char
类型成员。由于内存对齐的原因,int
类型通常会占用4字节且在内存中以4字节对齐,所以这个结构体的大小可能不是简单的sizeof(int)+sizeof(char)
,而是会根据编译器的对齐规则进行填充,实际大小可能大于这个和。
- 对于结构体,
- 联合体
- 联合体(union)的
sizeof
返回联合体所占用的字节数,其大小取决于联合体中最大成员的大小。例如:
#include <iostream> union MyUnion { int a; double b; }; int main() { std::cout << "sizeof(MyUnion): " << sizeof(MyUnion) << " bytes" << std::endl; return 0; }
- 这里
MyUnion
联合体包含一个int
类型成员和一个double
类型成员,因为double
类型占用字节数较多(通常8字节),所以sizeof(MyUnion)
返回的值是8字节。
- 联合体(union)的
- 结构体
0 条评论
目前还没有评论...