关键字之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

相关文章

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 当

关键字synchronized、volatile的比较

关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且volatile只能修饰于变量,而synchronized可以修饰方法,以及代码块。随着JDK新版本的发布,synchronized关键字的执行效率上得到很大提升,在开发中使用synchronized关键字的比率还是比较大的。多线程访问volatile不会发生阻塞,而synchronize

JavaScript 根据关键字匹配数组项

要在JavaScript数组中根据关键字匹配项,可以使用filter方法结合一个测试函数。以下是一个示例代码,定义了一个函数findByKeyword,该函数接受一个数组和一个关键字,然后返回一个新数组,其中包含与关键字匹配的所有项。 function findByKeyword(array, keyword) {return array.filter(item => {// 假设要匹配的是对象

MySQL 的关键字

MySQL 中的关键字是数据库中具有特殊含义的保留字,它们用于定义数据库结构、操作数据库数据和控制数据库行为。关键字在 MySQL 查询中扮演着至关重要的角色,因为它们是 SQL 语句的核心组成部分。 1. 数据定义语言 (DDL) 关键字 数据定义语言 (DDL) 关键字用于定义、修改和删除数据库结构,如数据库、表和索引等。这些关键字通常用于创建、删除表结构以及修改表的列等操作。 1.1

C++中的mutable关键字详解

目录 1.概述 2.使用场景 3.示例 4.mutable修饰Lambda表达式 5.注意事项 1.概述         在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。         我们知道,被const关键字修饰的函数的一个重要作用就是为了能够保护类中的成员变量。即:该函数可以

[Python]生成器和yield关键字

生成器和yield关键字 1.生成器介绍: 概述: ​ 它指的是 generator, 类似于以前学过的: 列表推导式, 集合推导式, 字典推导式… 作用: ​ 降低资源消耗, 快速(批量)生成数据. 实现方式: ​ 1.推导式写法. my_generator = (i for i in range(5)) ​ 2.yield写法. def get_generator():for i

java基础总结11-面向对象7(super关键字)

在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用里面的父类对象呢?使用super来引用,this指的是当前对象的引用,super是当前对象里面的父对象的引用。 1 super关键字测试 package cn.galc.test;/*** 父类* @autho

java基础总结08-面向对象4(static关键字)

原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量。对于static成员变量来说,这个成员变量只有一份,而且这一份是这个类所有的对象共享。 静态成员变量与非静态成员变量的区别 以下面的例子为例说明 package cn.galc.test;public class Cat {/*** 静态成员变量*/private static