C语言重新学17——sizeof 运算符

南飓风  金牌会员 | 2024-6-26 06:51:00 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 657|帖子 657|积分 1971

       sizeof 是 C 语言中的一个运算符,我们也可以理解为是一个函数。它是我们经常利用且极为紧张的一个运算符,其功能是返回某种数据类型或某个值或某个变量占用内存的字节数。它的参数可以是数据类型、具体值、变量名、自定义类型。用一个小程序做例子:
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.     printf("int类型占 %zd 字节\n",sizeof(int)); //运行结果:4字节
  5.     printf("字符串"abcdefg"占 %zd 字节\n", sizeof("abcdefg"));//运行结果:8字节
  6.     short a;
  7.     printf("short类型变量a占 %zd 字节\n", sizeof(a));//运行结果:2字节
  8.     char s[5][5];
  9.     printf("char s[5][5]数组占 %zd 字节\n", sizeof(s));//运行结果:25字节
  10.     char* p;
  11.     printf("char* p指针占 %zd 字节\n", sizeof(p));//运行结果:8字节(有的系统指针占4字节,但同一系统中各类型指针字节数都相同)
  12.     char c = getchar(); //阻塞程序运行
  13.     return 0;
  14. }
复制代码
       当我们运行上边的代码时,虽能输出精确效果,但编译器在代码上加上了绿色波纹线,这是
什么原因呢?这个与 sizeof 的返回值类型相干。sizeof 到底返回什么类型,不同的系统中,返回值的类型有可能是unsigned int ,也有可能是 unsigned long或其它,为此C语言专门创建了一个类型size_t 用来统一表示 sizeof 的返回值类型,并创建了宏 SIZE_MAX 表示系统允许 sizeof 返回值的最大数(针对自定义类型而言的),并用 %zd 作为这种类型输出的占位符。所以将上面代码中 %d 改为 %zd 后,绿色波纹线就会消失。以后我们凡是用到sizeof的返回值并需赋给一个变量时,这个变量的类型就声明为size_t。多数时候,不必接收sizeof的返回值,而是直接将 sizeof 计算式写入函数参数之中,既省事又清楚。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表