良许Linux教程网 干货合集 sizeof你真的弄明白了吗?来看看这个例子

sizeof你真的弄明白了吗?来看看这个例子

sizeof基础

在C语言中,sizeof是一个操作符(operator),而不是函数,用于计算数据类型或表达式所占用的内存字节数。它可以有两种形式:

  1. sizeof(类型说明符)
  2. sizeof 表达式

通常我们使用第一种形式。

sizeof的返回值类型是size_t,在头文件stddef.h中定义。这个类型的值是依赖于编译系统的,一般被定义为:

typedef unsigned int size_t;

在确定C语言各个基本数据类型在当前编译环境中所占用的字节数之前,我们需要知道当前是32位编译环境。

#include 

int main(void)
{
  printf("sizeof(char)  = %u\n", sizeof(char));
  printf("sizeof(short) = %u\n", sizeof(short));
  printf("sizeof(int)   = %u\n", sizeof(int));
  printf("sizeof(long)  = %u\n", sizeof(long));
  printf("sizeof(float) = %u\n", sizeof(float));
  printf("sizeof(double)= %u\n", sizeof(double));

  return0;
}

我们这里的输出结果为:

image-20231009212508701
image-20231009212508701

sizeof典型问题

sizeof看起来似乎很简单,那来看看下面这段代码,你能做对几个image-20231009212511827

#include 

int main(void)
{
  char *s = "hello";

  printf("sizeof(char) = %u\n", sizeof(char));
  printf("sizeof(char*)= %u\n", sizeof(char*));
  printf("sizeof('a')  = %u\n", sizeof('a'));
  printf("sizeof(*s+0) = %u\n", sizeof(*s+0));
  printf("sizeof(*s)   = %u\n", sizeof(*s));
  printf("sizeof(s)    = %u\n", sizeof(s));

  return0;
}

实际输出结果为:

image-20231009212514594
image-20231009212514594

你懵了吗?没懵的话算我输图片

image-20231009212520166
image-20231009212520166

简要分析:

(1)sizeof(char) 的值为1。因为char类型数据在内存中占1字节。

(2)sizeof(char*)的值为4。因为char*代表一个指针,在32bit环境中为4字节,也即unsigned int的字节长度。

(3)sizeof('a')的值为4。因为此处‘a’是独立存在的一个字符(没有赋值给其它变量),实际上就是一个整型数,占4个字节,即此处‘a’对应的ascii码的十进制为整数97。(貌似解释得有些牵强,但事实就是这样image-20231009212524848)但是需要注意的是,若有如下定义:

char ch = ‘a’;

则此处ch的字节数sizeof(ch)的值为1,而不是4。

(4)sizeof(*s+0)的值为4,因为’h’+0 转化为int,占4字节。此处涉及到类型转换的问题。即不同类型的数据进行运算时,会首先转换成相同数据类型。转换规则为(图片来源于网络):

image-20231009212527592
image-20231009212527592

(5)sizeof(*s)的值为1,因为此处*s为字符串s的第1个字符‘h’(注意与第三点区分开来,这里是有用char来修饰的),所以所占字节长度为1。

(6)sizeof(s)的值为4,同(2),此处s是一个指针,在32bit环境中为4字节,也即unsigned int的字节长度。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部