首页 > 其他分享 >关键字之sizeof

关键字之sizeof

时间:2024-08-31 22:25:05浏览次数:12  
标签:zd unsigned 关键字 int printf 类型 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)代替。


标签:zd,unsigned,关键字,int,printf,类型,sizeof
From: https://blog.csdn.net/wangjing_0522/article/details/141727263

相关文章

  • 关键字之signed和unsigned
    生活中的我们发现数据只有正数,比如:年龄,体重,等,但有些数据是有正负数的,比如:温度,海拔等,那么C语言中如何表达正负数呢?1.signed和unsignedC语言引入signed和unsigned关键字来修饰char、short、int、long等整型家族的类型。使用signed关键字,表示一个类型带有正负号,包含负值。使用......
  • `new` 关键字、隐藏基类方法
    new关键字、隐藏基类方法new关键字还可以用来隐藏基类中的方法。当子类的方法名称与基类中的方法名称相同,但不希望子类的方法被视为重写(override)基类的方法时,可以使用new关键字来声明子类的方法,从而隐藏基类的方法。代码示例publicclassBaseClass{publicvirtual......
  • # 泛型中的new关键字的约束的函数
    泛型中的new关键字的约束的函数一般用于泛型约束,在函数或者类的末尾,通过whereT:new()约束,确保T类型可以被实例化。应用场景在封装sqlsugar中我遇到了类似的用法,传给sqlsugar中的entity必须有一个公开的无参构造函数......
  • Java中super关键字的学习
    super关键字目录super关键字1.访问父类的成员变量2.调用父类的方法3.调用父类的构造方法4.在实现接口的类中调用接口的默认方法注意事项在Java中,super是一个关键字,它主要用于在子类中引用父类的成员(包括字段、方法和构造方法),或者用于解决子类和父类之间的命名冲突。以下是s......
  • C++学习——类当中static关键字的作用
    一、类和对象我们知道类是“行为”和“属性”的集合,我们可以通过类来实例化对象,从而定义对象的“行为”和“属性”。比如:classCar{ Stringbrand; Stringlicense; Stringcolor;}CarToyota;这里定义了“Car”的类,通过“Car”这个类实例化了“Toyota”。那么类当中的......
  • PHP8面向对象快速入门三 类的继承 类方法属性重写和final关键字 parent调用父类的方法
    在PHP中,类的继承(继承)是一种机制,允许一个类继承另一个类的属性和方法,从而实现代码的重用和扩展。继承可以帮助你创建一个基于现有类的新类,保留原有类的特性并增加或修改其功能。classAnimal{public$name='dongwu';protected$age=1;private......
  • 5 Python的变量、关键字、命名规则、基本数据类型及类型转换
    本文是Python系列教程第5篇,完整系列请查看Python专栏。1定义变量在Python中定义变量非常简单,你只需要给变量赋值即可。Python会自动检测变量的数据类型。下面是一些基本的例子来展示如何定义不同类型的变量:1.1整数age=251.2浮点数height=1.751.3字......
  • Java中final关键字的学习
    final关键字目录final关键字1.修饰变量2.修饰方法3.修饰类4.修饰方法参数注意事项示例在Java编程语言中,final关键字是一个非常重要的概念,它用于表示一个变量、方法或类是不可变的或不能被进一步修改的。以下是final关键字的几种常见用法:1.修饰变量常量:final修饰的变量......
  • Android开发 - synchronized 关键字控制多个线程对共享资源的访问解析
    什么是synchronizedsynchronized一个关键字,用于实现线程同步。其主要作用是控制多个线程对共享资源的访问,确保被synchronized修饰的代码块或方法同一时间只有一个线程可以执行,从而避免数据不一致的问题为什么需要synchronized在多线程编程中,多个线程可能同时访问和修改......
  • Typecho Joe 导航菜单目录以及搜索关键字回显主题优化版
    Joe是Typecho博客中一款开源免费且非常精美的主题,但是这款主题很早就停止维护了,有些功能作者并没有开发,并且在Typecho更新到1.2.1版本后还出现了一个小BUGJoe主题的知名度很高,所以在原作者停止维护后很多大佬发布过自己魔改的版本,不可否认魔改后的主题BUG基本解决,而且......