C语言从头学17——sizeof 运算符

sizeof 是 C 语言中的一个运算符,我们也可以理解为是一个函数。它是我们经常使用且极为重要的一个运算符,其功能是返回某种数据类型或某个值或某个变量占用内存的字节数。它的参数可以是数据类型、具体值、变量名、自定义类型。用一个小程序做例子:

cpp 复制代码
#include<stdio.h>
int main(void)
{
    printf("int类型占 %zd 字节\n",sizeof(int)); //运行结果:4字节
    printf("字符串\"abcdefg\"占 %zd 字节\n", sizeof("abcdefg"));//运行结果:8字节
    short a;
    printf("short类型变量a占 %zd 字节\n", sizeof(a));//运行结果:2字节
    char s[5][5];
    printf("char s[5][5]数组占 %zd 字节\n", sizeof(s));//运行结果:25字节
    char* p;
    printf("char* p指针占 %zd 字节\n", sizeof(p));//运行结果:8字节(有的系统指针占4字节,但同一系统中各类型指针字节数都相同)
    char c = getchar(); //阻塞程序运行
    return 0;
}

当我们运行上边的代码时,虽能输出正确结果,但编译器在代码上加上了绿色波纹线,这是

什么原因呢?这个与 sizeof 的返回值类型相关。sizeof 到底返回什么类型,不同的系统中,返回值的类型有可能是unsigned int ,也有可能是 unsigned long或其它,为此C语言专门创建了一个类型size_t 用来统一表示 sizeof 的返回值类型,并创建了宏 SIZE_MAX 表示系统允许 sizeof 返回值的最大数(针对自定义类型而言的),并用 %zd 作为这种类型输出的占位符。所以将上面代码中 %d 改为 %zd 后,绿色波纹线就会消失。以后我们凡是用到sizeof的返回值并需赋给一个变量时,这个变量的类型就声明为size_t。多数时候,不必接收sizeof的返回值,而是直接将 sizeof 计算式写入函数参数之中,既省事又清楚。

相关推荐
不正经学生2 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技3 小时前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
xiaobobo33306 小时前
c语言中for循环条件中定义临时栈变量的作用域
c语言·for循环条件定义栈变量·大括号作用域·独立栈变量
惜离殇7 小时前
从零开始的敲代码生活--Linux应用软件(文件操作基础1)
linux·c语言·文件操作·标准io
潘潘的嵌入式日记9 小时前
I²C 从机接收总被覆盖?双缓冲要在 STOP 时交接
c语言·开发语言·单片机
xx~t10 小时前
嵌入式——Linux软件编程——网络1
linux·c语言·网络·vscode·网络协议
羚尔14 小时前
C语言数组
c语言·开发语言
老当益壮梁奶奶17 小时前
Linux软件编程学习笔记(十一):深入浅出 TCP 协议与 Socket 编程实践
linux·c语言·笔记·学习·tcp/ip
Navigator_Z18 小时前
LeetCode //C - 1223. Dice Roll Simulation
c语言·算法·leetcode
Patrick在香港18 小时前
Python 拉取 C&SD 官方 API:香港 2022 年已跨过“超老龄线“,而抚养比正在爬回 1961
android·c语言·python·数据分析·时序数据库·数据可视化·香港