当前位置: 首页 > ds >正文

sizeof()运算符

在C语言中,sizeof 是一个非常重要的运算符,用于计算类型的大小,返回值为该类型所占用的字节数。以下是对 sizeof 的详细解释:

语法

sizeof 的语法有两种形式:

  1. sizeof(type):计算指定类型占用的字节数。
    size_t size = sizeof(int); // 计算int类型的大小
    
  2. sizeof(expression):计算表达式占用的字节数。表达式本身就给出了类型。
    int a = 10;
    size_t size = sizeof(a); // 计算变量a的大小,即int类型
    

特点

  1. 返回类型
    • sizeof 返回的是 size_t 类型,它是一个无符号整型,能够表示对象的大小(通常为字节数)。size_t 被定义在很多标准头文件中(如 <stddef.h><stdio.h> 等),通常与平台有关,常见的大小为4字节或8字节,取决于具体的系统架构。
  2. 编译时计算
    • sizeof 是在编译时进行计算的,而不是在运行时。这意味着编译器在编译代码时就已经确定了表达式或类型的大小,因此它不会增加运行时的开销。
  3. 作用范围
    • 可以应用于基础数据类型(如 intfloatchar 等)、用户自定义的结构体(struct)或联合体(union)、数组以及指针等。

常见用途

  1. 计算数组大小
    • 计算数组的总字节数,可以通过 sizeof(array) 得到。比如:
      int arr[10];
      size_t arr_size = sizeof(arr); // 得到数组占用的总字节数
      
    • 如果想获取数组的元素个数,可以结合元素类型大小来计算:
      size_t num_elements = sizeof(arr) / sizeof(arr[0]); // 计算数组元素个数
      
  2. 动态内存分配
    • 在使用 malloccalloc 等函数分配动态内存时,需要指定分配的字节数。sizeof 常用于计算要分配的内存大小:
      int *ptr = (int *)malloc(10 * sizeof(int)); // 为10个int分配内存
      
  3. 处理不同系统平台的数据类型大小
    • 不同的操作系统和硬件平台下,数据类型大小可能不同。通过 sizeof 可以避免硬编码数据类型大小,增加代码的可移植性。

示例

以下是使用 sizeof 的一些示例:

#include <stdio.h>int main() {printf("Size of char: %zu\n", sizeof(char)); // 通常为1字节printf("Size of int: %zu\n", sizeof(int));   // 通常是4字节,具体取决于平台printf("Size of float: %zu\n", sizeof(float)); // 通常是4字节printf("Size of double: %zu\n", sizeof(double)); // 通常是8字节struct MyStruct {int a;float b;};printf("Size of struct MyStruct: %zu\n", sizeof(struct MyStruct)); // 计算结构体大小int arr[5];printf("Size of array arr: %zu\n", sizeof(arr)); // 计算数组大小printf("Number of elements in arr: %zu\n", sizeof(arr) / sizeof(arr[0])); // 数组元素个数return 0;
}

注意事项

  1. 指针大小
    • 指针的大小通常与系统架构有关,32位系统下一般为4字节,64位系统下一般为8字节。指针的大小是固定的,与它所指向的类型无关。
      int *ptr;
      printf("Size of int*: %zu\n", sizeof(ptr)); // 指针大小与类型无关
      
  2. 数组大小与指针
    • 如果数组作为函数参数传递,它会退化为指针,此时使用 sizeof 无法得到数组的大小,只能得到指针的大小。
      void func(int arr[]) {printf("Size of arr in func: %zu\n", sizeof(arr)); // 得到指针大小
      }
      

sizeof 是 C 语言中用于处理类型大小的重要工具,理解和正确使用它可以提高代码的可读性和可移植性。

http://www.xdnf.cn/news/6532.html

相关文章:

  • 嵌入式学习笔记 D21:双向链表的基本操作
  • 系统集成项目管理工程师学习笔记
  • 【日撸 Java 三百行】Day 16(递归)
  • Ubnutu ADB 无法识别设备的解决方法
  • 数据库的锁 - 全局锁、表锁、行锁
  • Vuex和Vue的区别
  • RabbitMQ概述
  • 【ArcGIS技巧】根据地块、界址点图层生成界址线
  • 如何在Edge浏览器里-安装梦精灵AI提示词管理工具
  • MySQL数据类型之VARCHAR和CHAR使用详解
  • 基于大模型预测围术期麻醉苏醒时间的技术方案
  • Ubuntu 安装 Redis
  • 《Adversarial Sticker: A Stealthy Attack Method in the Physical World》论文分享(侵删)
  • A2O娱乐李秀满纪录片首映礼,A2O MAY、少女时代、崔始源、泰民齐聚祝贺
  • 脚本语言Lua
  • 使用PEFT库将原始模型与LoRA权重合并
  • 视频分辨率增强与自动补帧
  • ‌JMeter聚合报告中的任务数和并发数区别
  • 【HarmonyOS 5】鸿蒙mPaaS详解
  • MySQL 开发的智能助手:通义灵码在 IntelliJ IDEA 中的应用
  • Python网络请求利器:urllib库深度解析
  • 单片机-STM32部分:16、Git工具使用
  • 计算图存储采用矩阵吗,和张量关系
  • linux libdbus使用案例
  • 15.springboot-控制器处理参数传递
  • 2025年山东省数学建模F题思路
  • PostgreSQL MCP 使用案例
  • 动态规划问题 -- 多状态模型(买股票的最佳时机II)
  • Vue组件-霓虹灯:技术解析与实现
  • OpenCV CUDA模块中矩阵操作-----矩阵最大最小值查找函数