C语言之运算符sizeof

        sizeof 是 C 和 C++ 编程语言中的一个操作符,用于返回一个对象或数据类型所占用的字节数。它在编写高效和安全的代码时非常有用,尤其是在处理动态内存分配和数组时。

一、基本用法

1.获取数据类型的大小:

int size_of_int = sizeof(int); // 返回 int 类型的字节数,通常为 4

2.获取变量的大小:

int a = 5;
int size_of_a = sizeof(a); // 返回 a 变量的字节数,通常为 4

3.获取数组的大小:

int arr[10];
int size_of_arr = sizeof(arr); // 返回整个数组的字节数,通常为 10 * 4 = 40
int number_of_elements = sizeof(arr) / sizeof(arr[0]); // 计算数组元素个数


二、用法注意事项

1.对于动态分配的内存:
       对于通过 malloc 或 calloc 分配的内存,sizeof 不会返回所分配的内存大小,而是返回指针的大小。

int *ptr = (int *)malloc(10 * sizeof(int)); // 分配 10 个 int 的内存
int size_of_ptr = sizeof(ptr); // 返回指针的大小,通常为 4 或 8

2.使用 sizeof 获取结构体大小:

struct MyStruct 
{
    int a;
    double b;
};
int size_of_struct = sizeof(struct MyStruct); // 返回结构体的字节数

三、 sizeof 和类型

1.对类型名使用 sizeof:
        可以直接对数据类型使用 sizeof:

int size_of_double = sizeof(double); // 返回 double 的字节数

2.对数组类型使用 sizeof:
        数组的大小可以通过 sizeof 获取,但如果数组作为函数参数传递,则会退化为指针,无法获得其大小。

void func(int arr[]) 
{
    int size = sizeof(arr); // 返回指针的大小,而不是数组的大小
}

四、sizeof 的用途示例

1.动态内存分配:

int *arr = (int *)malloc(10 * sizeof(int)); // 分配 10 个 int 的内存

2.确保结构对齐:

struct AlignedStruct 
{
    char c;
    int i; // 可能会有填充字节
};
printf("Size of struct: %zu\n", sizeof(struct AlignedStruct)); // 输出结构体实际大小

五. 计算数组元素个数的安全方法

1.使用 sizeof 计算数组元素个数的安全方法:

#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))

int main() 
{
    int arr[10];
    printf("Number of elements: %d\n", ARRAY_SIZE(arr)); // 输出 10
    return 0;
}

六、总结

       sizeof 是一个非常有用的操作符,可以帮助开发者了解数据类型和变量的内存占用情况。它在内存管理、数组处理和结构体设计等方面具有广泛的应用。使用 sizeof 时,请注意其在不同上下文中的行为,特别是在处理指针和动态内存时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值