关键字之sizeof

2024-08-31 16:20
文章标签 关键字 sizeof

本文主要是介绍关键字之sizeof,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接下来我讲的是之前我提到过的C语言关键字

sizeof同时它也是C语言提供的操作符(运算符)

它的使用形式有两种

1 sizeof(类型)

2 sizeof 表达式

sizeof返回某种数据类型或某个值占用的字节数量,它的参数可以是数据类型的关键字,也可以是变量名或某个具体的值。

sizeof不仅仅可以计算内置的类型的大小,计算数组、自定义类型的大小都是可以的。

1 #include <stdio.h>

2 int main()

3 {

4 int a=20;

5 printf("%zd\n",sizeof(int));//4

6 printf("%zd\n",sizeof(a));//4

7 printf("%zd\n",sizeof a);//4

8 printf("%zd\n",sizeof(3.14));//8

9 printf("%zd\n",sizeof(3.14f));//4

10 return 0;

11 }

说明:

1.整型类型的变量是4个字节,直接使用整型类型也是4个字节。

2.sizeof的括号中给的不是类型的话,括号可以省略。

3.3.14被编译器识别为double类型,所以大小是8个字节。

4.3.14f因为在3.14后面加了f,会被编译器识别为float类型,是4个字节。

sizeof的返回类型

sizeof运算符的返回值,C语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定,sizeof到底返回什么类型。不同的系统返回的值的类型可能是unsigned int,也可能是unsigned  long,甚至可能是unsigned long long,对应printf()占位符分别是%u %lu %llu。这样不利于程序的可移植性。

C语言提供了一个解决方案,创造了一个类别名为size_t,用来统一表示sizeof的返回值类型。该别名定义在stddef.h头文件中(引入stdio.h时会自动引用)里面,对应当前系统的sizeof的返回值类型,可能是unsigned int ,也可能是unsigned long long

注:vs2022中,size_t是定义在vcruntime.h中的,不同的编译器实现略有差异。

C语言还提供一个常量SIZE_MAX,表示size_t可以表示的最大整数。

所以,size_t能够表示的整数范围为[0,SIZE_MAX]

printf()有专门的占位符%zd或%zu,用来处理size_t类型的值

1 #include <stdio.h>

2 int main()

3 {

5 printf("%zd\n",sizeof(int));

6 return 0;

7 }

上面代码中,不管sizeof返回值的类型是什么,%zd占位符(或者%zu)都可以正确的输出。

如果当前系统不支持%zd%zu,可使用%u(unsigned int)%lu(unsigned  long)代替。


这篇关于关键字之sizeof的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124397

相关文章

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

Java中的volatile关键字多方面解析

《Java中的volatile关键字多方面解析》volatile用于保证多线程变量可见性与禁止重排序,适用于状态标志、单例模式等场景,但不保证原子性,相较synchronized更轻量,但需谨慎使用以... 目录1. volatile的作用1.1 保证可见性1.2 禁止指令重排序2. volatile的使用

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

c# checked和unchecked关键字的使用

《c#checked和unchecked关键字的使用》C#中的checked关键字用于启用整数运算的溢出检查,可以捕获并抛出System.OverflowException异常,而unchecked... 目录在 C# 中,checked 关键字用于启用整数运算的溢出检查。默认情况下,C# 的整数运算不会自

Oracle Start With关键字

Oracle Start With关键字 前言 旨在记录一些Oracle使用中遇到的各种各样的问题. 同时希望能帮到和我遇到同样问题的人. Start With (树查询) 问题描述: 在数据库中, 有一种比较常见得 设计模式, 层级结构 设计模式, 具体到 Oracle table中, 字段特点如下: ID, DSC, PID; 三个字段, 分别表示 当前标识的 ID(主键), DSC 当