跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 跨境风云 > 【C语言】------sizeof关键字用法详解

【C语言】------sizeof关键字用法详解

时间:2024-03-25 19:11:36 来源:网络cs 作者:晨起 栏目:跨境风云 阅读:

标签: 关键  语言 
阅读本书更多章节>>>>

前言

    在我们刚开始学习C语言时,很容易将sizeof和strlen()函数混淆,那么在这里我们就先介绍一下**sizeof关键字**

一、sizeof是什么呢?

sizeof是C语言的一种单目操作符,如同C语言中其他的操作符++、–等,sizeof运算符是以字节为单位给出操作对象的存储大小。操作对象可以是表达式,类型名,结构体等,下面会一 一举例。

常见的应用场景

1.直接作用于数据类型

代码如下(示例):

printf("short=%d\n\n", sizeof(short));//结果是short=2printf("int=%d\n\n", sizeof(int));//int=4printf("long=%d\n\n", sizeof(long));//long=4printf("float=%d\n\n", sizeof(float));//float=4printf("double=%d\n", sizeof(double));//double=8
 需要注意的是在对数据类型进行操作时括号是不可以省去的,若是省 去则无法通过编译

2.作用于数值

 注:上面介绍sizeof是操作符,并不是函数,这就意味着在某些情况下括号是 可以省去的

使用形式;四则偶分(var)或sizeof var(不带控号的在这里就不展示了,大家下去可以自己尝试一下)
代码如下(示例):

char c = 'a';int a = 1;double b = 1.0;printf("%d    ", sizeof(c)); // 结果是1printf("%d    ", sizeof(c + a)); // 结果是4printf("%d    ", sizeof(a + b));//结果是8//上面两行代码在运行时发生了整型提升这里我们就不介绍了,不懂的小伙伴可以搜一下printf("%d   %c", sizeof(c = c + a),c);//结果是1,a,这说明括号中的赋值没有被执行

3.作用于数组

      sizeof用于计算数组大小时,计算的是数组总字节大小,并不受存 储数据多少影响
int arr[10] = { 1,2,5,6,4,7 };printf("%d  ", sizeof(arr));//结果是40char c[10] = "a,b,c,f,e";printf("%d  ", sizeof(c));//结果是10

4.作用于指针

       指针是地址,指向某处内存空间,指针所占字节大小仅受**编译环境** 影响(在32位和64位机器下会有不同),和所指向空间大小无关。下面 我将在64位机器下演示。
int a = 0;int*p1 = &a;printf("%d  ", sizeof(p1));//结果是8char b = 0;char*p2 = &b;printf("%d  ", sizeof(p2));//结果是8

可以看出虽然两个指针指向的空间大小不同,但是指针所占空间大小并没有受影响

5.作用于结构体

struct W{int a;short d;char b;long c;}w1;printf("%d  ", sizeof(w1));//结果是12struct WW{char b;int a;long c;short d;}w2;printf("%d  ", sizeof(w2));//结果是16

明明结构体中定义的类型都相同,为什么结果有差异呢?哈哈哈这就不提到结构体对齐了,因为这不是我们这次的重点就先不介绍了,有兴趣大家可以搜一搜

 下次将介绍strlen()函数和sizeof在计算字符串时的区别
阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/fengyun/2024-03-25/148581.html,文章来源:网络cs,作者:晨起,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论