<c语言学习> sizeof 返回的类型是啥?为啥用%zd作为占位符 您所在的位置:网站首页 为啥说是c位 <c语言学习> sizeof 返回的类型是啥?为啥用%zd作为占位符

<c语言学习> sizeof 返回的类型是啥?为啥用%zd作为占位符

2024-07-02 07:27| 来源: 网络整理| 查看: 265

sizeof 是什么 

  sizeof 是一种关键字 ,在c语言里关键字有以下32种

auto double int struct break else long switch

case enum register typedef char extern return union

const float short unsigned continue for signed void

default goto sizeof volatile do if while static

从用法来看,这玩意很像函数,但本质上不是函数!不是函数!不是函数!

如果是自带的函数的话,是要申明的,比如printf打印函数,它需要stdio.h头文件申明使用。

sizeof 用法

先上代码

#include //申明要用到输出函数 int main() { int a = 0; int b = 2; a = sizeof(b); //把sizeof()的返回值付给a printf("变量a的占用空间大小为%d字节", a); return 0; }

sizeof():括号里放表达式或关键字;

 它会返回一个结果,该结果为括号里的东西的大小,这个大小单位是字节 ;

 比如上面的代码里 sizeof(b) 返回的就是变量 b 在内存所占的空间 ;

输出结果如下图

sizeof 返回的类型

    c语言标准规定了 sizeof 返回的类型 为无符号整形(就是只有0和正整数),但是并没有具体要求是什么整形,所以在不同编译器里 sizeof 返回的 类型 各有不同,有的返回无符号int类型,有的返回 无符号long 类型,有的返回 无符号long long 类型。

    所以c语言标准后来单独为了这个 sizeof的返回值 定义了一个数据类型 size_t  ,编译器需要给 size_t  起别名来解释自家的sizeof用的是什么类型,比如某某编译器给 size_t 起别名 叫无符号int类型, 那在这个编译器的sizeof 返回的值 就是 无符号int类型。

为啥用%zd作为占位符

    这里上一个展示这样带来的麻烦的代码:

#include int main() { printf("%d", sizeof(int)); return 0; }

    前面提到:sizeof()的括号里可以放关键字,这里放一个关键字int,该代码作用是打印关键字int的内存占用大小  ,输出结果为 4;

    那么麻烦在哪里呢?编译器会因为你使用 %d 作为占位符发出警告,原因如下:

    %d本来是整形int 的占位符,但是sizeof 的 返回值类型不一定是int 。

    于是不同编译器里的 sizeof 的返回值有不同的占位符 ,比如在VS环境里,sizeof的返回值用的占位符是%zd 。

    也可以说在VS环境里,数据类型 size_t 的占位符是%zd。

    将上面会报警的代码里的%d换成%zd 就不会报警了。

#include int main() { printf("%zd", sizeof(int)); return 0; } 总结

    %d 是int整形的占位符 , %zd 是vs 环境下的独特占位符;

    sizeof 返回值类型是 size_t;

    size_t 是无符号整形 ,至于是长整形还是短整形,每个编译器定义的不同;

    在vs环境里 ,size_t类型数据的占位符是%zd。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有