【C语言】sizeof 关键字

在这里插入图片描述

在C语言中,sizeof运算符用于计算数据类型或变量的大小(以字节为单位)。sizeof是一个编译时运算符,它在编译阶段确定类型或变量的大小,而不是在运行时。

基本用法

sizeof可以用于计算基本数据类型、数组、结构体以及指针的大小。

基本数据类型
#include <stdio.h>

int main() {
    printf("Size of char: %zu bytes\n", sizeof(char));
    printf("Size of int: %zu bytes\n", sizeof(int));
    printf("Size of float: %zu bytes\n", sizeof(float));
    printf("Size of double: %zu bytes\n", sizeof(double));
    return 0;
}

在这个例子中,sizeof运算符用于计算基本数据类型的大小,并使用%zu格式说明符来打印结果。%zu是打印size_t类型的推荐格式说明符。

变量
#include <stdio.h>

int main() {
    int num;
    double value;
    printf("Size of num: %zu bytes\n", sizeof(num));
    printf("Size of value: %zu bytes\n", sizeof(value));
    return 0;
}

在这个例子中,sizeof运算符用于计算变量的大小。

数组
#include <stdio.h>

int main() {
    int array[10];
    printf("Size of array: %zu bytes\n", sizeof(array));
    printf("Number of elements in array: %zu\n", sizeof(array) / sizeof(array[0]));
    return 0;
}

在这个例子中,sizeof运算符用于计算数组的大小,以及数组中元素的数量。计算数组中元素的数量的方法是用数组的总大小除以单个元素的大小。

结构体
#include <stdio.h>

typedef struct {
    int id;
    char name[50];
    float salary;
} Employee;

int main() {
    Employee emp;
    printf("Size of Employee: %zu bytes\n", sizeof(Employee));
    printf("Size of emp: %zu bytes\n", sizeof(emp));
    return 0;
}

在这个例子中,sizeof运算符用于计算结构体类型和结构体变量的大小。

指针和动态内存分配

sizeof运算符还可以用于计算指针的大小,以及为动态内存分配提供合适的大小参数。

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr = malloc(10 * sizeof(int));
    if (ptr != NULL) {
        printf("Memory allocated for 10 integers\n");
        free(ptr);
    } else {
        printf("Memory allocation failed\n");
    }
    return 0;
}

在这个例子中,sizeof(int)用于计算分配10个整数所需的内存大小。

注意事项

  1. 类型和表达式sizeof可以作用于类型和表达式。当作用于类型时,需要使用括号;当作用于变量时,可以省略括号。

    sizeof(int);       // 作用于类型,需要括号
    sizeof num;        // 作用于变量,可以省略括号
    
  2. 编译时计算sizeof在编译时计算,不会导致运行时的开销。这意味着你可以安全地在任何地方使用sizeof来确定大小。

  3. 结构体对齐:计算结构体大小时,可能会因为内存对齐而大于所有成员大小的总和。

    typedef struct {
        char a;
        int b;
    } Example;
    
    int main() {
        printf("Size of Example: %zu bytes\n", sizeof(Example));
        return 0;
    }
    

    在这个例子中,sizeof(Example)可能会大于1字节(char)和4字节(int)的总和,具体取决于编译器的内存对齐策略。

示例程序

以下是一个包含多种用法的综合示例:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int id;
    char name[50];
    float salary;
} Employee;

int main() {
    int num = 10;
    double value = 20.5;
    int array[10];
    Employee emp;

    printf("Size of int: %zu bytes\n", sizeof(int));
    printf("Size of double: %zu bytes\n", sizeof(double));
    printf("Size of num: %zu bytes\n", sizeof(num));
    printf("Size of value: %zu bytes\n", sizeof(value));
    printf("Size of array: %zu bytes\n", sizeof(array));
    printf("Number of elements in array: %zu\n", sizeof(array) / sizeof(array[0]));
    printf("Size of Employee: %zu bytes\n", sizeof(Employee));
    printf("Size of emp: %zu bytes\n", sizeof(emp));

    int *ptr = malloc(10 * sizeof(int));
    if (ptr != NULL) {
        printf("Memory allocated for 10 integers\n");
        free(ptr);
    } else {
        printf("Memory allocation failed\n");
    }

    return 0;
}

这个示例程序演示了sizeof运算符在计算各种数据类型、变量、数组、结构体和动态内存分配大小时的用法。

总结

sizeof运算符是C语言中一个非常有用的工具,可以在编译时确定数据类型或变量的大小。它广泛应用于内存管理、数组操作和结构体处理等方面。在现代C编程中,sizeof运算符依然是确保代码健壮性和性能的重要手段。

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

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

相关文章

银湖资本与UIBE达成战略合作,共同推动股权投资领域发展

近日&#xff0c;全球知名私募股权投资公司银湖资本&#xff08;Silver Lake Partners&#xff09;宣布与对外经济贸易大学&#xff08;UIBE&#xff09;校友发起的“UIBE阿波罗股权投资俱乐部”达成战略合作协议。此举不仅标志着双方在股权投资领域的深度合作&#xff0c;也为…

LVS-DR负载均衡

LVS-DR负载均衡 LVS—DR工作模式 原理 客户端访问调度器的VIP地址&#xff0c;在路由器上应该设置VIP跟调度器的一对一的映射关系&#xff0c;调度器根据调度算法将该请求“调度“到后端真实服务器&#xff0c;真实服务器处理完毕后直接将处理后的应答报文发送给路由器&#xf…

使用 draw.io 画图

尽管我非常喜欢 wps 和 office 的 ppt 画图&#xff0c;但因为它们对数学公式的糟糕支持&#xff0c;我不得不另外寻找一个画图工具。当然我也同样很喜欢 visio &#xff0c;但同样的&#xff0c;它对数学公式的支持糟糕&#xff0c;另外&#xff0c;最为重要的是&#xff0c;v…

不同的llm推理框架

vLLM适用于大批量Prompt输入&#xff0c;并对推理速度要求比较高的场景。 实际应用场景中&#xff0c;TensorRT-LLM通常与Triton Inference Server结合起来使用&#xff0c;NVIDIA官方能够提供更适合NVIDIA GPU运行的高效Kernel。 LightLLM比较轻量、易于扩展、易于上手&…

Android 抓取 CPU 资源信息

在 Android 开发中&#xff0c;使用 ADB&#xff08;Android Debug Bridge&#xff09;命令获取 CPU 资源信息有很多重要的作用。这些命令可以帮助开发者在多种情况下分析和优化应用性能、解决问题以及进行系统性调试。 以下列举一些 ABD 获取 CPU 资源信息的命令 获取 CPU 核…

农作物生长环境的远程监控与智能调控

农作物生长环境的远程监控与智能调控 农作物生长环境的远程监控与智能调控技术&#xff0c;作为现代农业科技的核心组成部分&#xff0c;正逐步革新传统农业的生产模式&#xff0c;推动农业向精准化、智能化转型。这一技术体系综合应用了物联网、大数据、云计算以及人工智能等…

C语言实战 | Flappy Bird游戏

Flappy Bird游戏是由一名越南游戏制作者独自开发的&#xff0c;曾经风靡全球。游戏规则非常简单&#xff0c;玩家必须控制一只小鸟&#xff0c;跨越由各种长度的水管所组成的障碍物&#xff0c;如果撞上管道游戏就结束&#xff0c;如图11.11所示。 ■ 图11.11Flappy Bird 游戏 …

启明智显Model3A芯片方案7寸高清触摸屏ZX7D00CM21S:开箱、设置与实操全攻略指南

一、背景 本指南将详细介绍启明智显的Model3A芯片方案下的7寸高清触摸屏ZX7D00CM21S的开箱步骤、基础设置以及实操应用。无论您是电子爱好者、开发者还是工程师&#xff0c;这份指南都能助您快速上手并充分利用这款触摸屏的各项功能。 二、硬件介绍 ZX7D00CM21S 7寸高清触摸屏是…

不知几DAY的Symfony---RCE复现

感谢红队大佬老流氓的供稿&#xff0c;此篇文章是针对Symfony框架的一个RCE漏洞复现 ​框架简介 Symfony是一个开源的PHP Web框架&#xff0c;它现在是许多知名 CMS 的核心组件&#xff0c;例如Drupal、Joomla!、eZPlatform&#xff08;以前称为 eZPublish&#xff09;或Bolt。…

7、Qt5开发及实列(笔记2)

文章目录 1、mainwindow.c2、mainwindow.h 说明&#xff1a;此示例包含了基本的常使用的基本小部件 效果如下 1、mainwindow.c #include "mainwindow.h" #include <QApplication>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {widgetInit()…

深度Q网络(DQN)算法技术博客

深度Q网络&#xff08;DQN&#xff09;是一种将深度学习与强化学习相结合的算法&#xff0c;用于解决高维状态空间的强化学习问题。本文将详细介绍DQN算法的基本原理&#xff0c;关键公式以及具体的代码实现。 一、DQN算法的基本原理 DQN算法是Q学习的一种扩展&#xff0c;利…

小程序 npm 支持

使用 npm 包 目前小程序已经支持使用 npm 安装第三方包&#xff0c;因为 node_modules 目录中的包不会参与小程序项目的编译、 上传和打包&#xff0c;因此在小程序 项目中要使用的 npm 包&#xff0c;必须走一遍构建 npm 的过程。在构建成功以后&#xff0c;默认 会在小程序目…

Python面向对象编程中的继承及其应用

目录 1. 继承的基本概念 2. 继承的语法 3. 继承的应用场景 4. 使用示例&#xff1a;汽车销售系统 5. 总结 继承是面向对象编程中的一个重要概念&#xff0c;它允许我们根据已有类创建新类&#xff0c;并继承已有类的属性和方法。在本文中&#xff0c;我们将学习Python中的…

向量数据库、主键存储引擎、高速网络 RDMA 框架……DolphinDB 版本更新啦!

盛夏已至&#xff0c;炎热的七月伊始&#xff0c;DolphinDB 也迎来了版本的更新。此次更新的 3.00.1 与 2.00.13 版本从多个维度进行了优化扩展&#xff0c;进一步深化了 DolphinDB 在机器学习、数据分析等领域的尝试与探索。 为了响应用户日益增长的 AI 运算需求&#xff0c;…

Java基础:爬虫

1.本地爬虫 Pattern:表示正则表达式 Matcher:文本匹配器&#xff0c;作用按照正则表达式的规则去读取字符串&#xff0c;从头开始读取。在大串中去找符合匹配规则的子串。 1.2.获取Pattern对象 通过Pattern p Pattern.compile("正则表达式");获得 1.3.…

nginx重定向

nginx的重定向 location 匹配 location 匹配的就是后面的URI /wordpress location 匹配的分类和优先级** 1、精确匹配 location / 对字符串进行完全匹配&#xff0c;必须完全符合 2、正则匹配 ^~ 前缀匹配&#xff0c; 以什么开头 -区分大小写的匹配 ~*不区分大小写 …

Redis 五大数据类型底层原理

0、前言 本文涉及的主题&#xff1a; redis 对象存储 底层数据结构&#xff1a;int、embstr、raw、ziplist、listpack、quicklist、skiplist、intset、hashtable redis 数据类型&#xff1a;string、list、set、zset、hash 1、对象存储、底层编码、数据类型 1.1 对象存储…

剧本杀小程序:助力商家发展,提高游戏体验

近几年&#xff0c;剧本杀游戏已经成为了当下年轻人娱乐的游戏社交方式。与其他游戏相比&#xff0c;剧本杀游戏具有强大的社交性&#xff0c;玩家在游戏中既可以推理玩游戏&#xff0c;也可以与其他玩家交流互动&#xff0c;提高玩家的游戏体验感。 随着互联网的发展&#xf…

QT截屏,截取控件为图片,指定位置截屏三种截屏方式

项目中我们常用到截取屏幕&#xff0c;Qt给我的们多种方式&#xff1a; 主要有以下三种&#xff1a; 截取全屏&#xff1b;截取控件为图片&#xff1b;指定位置截屏三种截屏方式&#xff1b; 1.截取全屏 常用&#xff1a; 实现&#xff1a; QScreen *screen QGuiApplicat…

SSM少儿读者交流系-计算机毕业设计源码20005

摘要 随着信息技术的发展和互联网的普及&#xff0c;少儿读者之间的交流方式发生了革命性的变化。通过使用Java编程语言&#xff0c;可以实现系统的高度灵活性和可扩展性。而SSM框架的采用&#xff0c;可以提供良好的开发结构和代码管理&#xff0c;使系统更加稳定和易于维护。…