C语言:sizeof运算符(超超超详细版本) | 您所在的位置:网站首页 › 数组长度最大值怎么算出来的 › C语言:sizeof运算符(超超超详细版本) |
sizeof运算符的介绍
1、定义2、基本数据类型3、变量4、指针5、数组6、参数数组7、结构体
1、定义
⭐⭐sizeof是一个单目运算符,不是函数,不要觉得平时使用会带()就觉得是函数了哦,它是32个关键字中的一员。 基本数据类型包括整型short、int和long,浮点型float和double,字符型char,直接上代码: printf("short int=%lld\n", sizeof(short)); printf("int=%lld\n", sizeof(int)); printf("long int=%lld\n", sizeof(long)); printf("long long int=%lld\n", sizeof(long long)); printf("float=%lld\n", sizeof(float)); printf("double=%lld\n", sizeof(double)); printf("char=%lld", sizeof(char));
如果出现错误C6328可以看看我的另一篇文章:C/C++编程报错合集(2):C6328 :大小不匹配 :已将_int64作为__Param_(2)传递,但需要使用int来调用printf 3、变量很简单,和上面差不多,只不过换成变量形式而已。 short int a = 1; int b = 1; long int c = 1; long long d = 1; float e = 1; double f = 1; char g = 'a'; printf("a=%lld\n", sizeof(a)); printf("b=%lld\n", sizeof(b)); printf("c=%lld\n", sizeof(c)); printf("d=%lld\n", sizeof(d)); printf("e=%lld\n", sizeof(e)); printf("f=%lld\n", sizeof(f)); printf("g=%lld", sizeof(g));如果还没有学过指针的一定要去学啊,因为指针真的很重要哦。(这里默认已经学过了哈,如果有时间再写指针的文章吧,现在没有时间呢😂) 我们可以把指针看成一个指针变量,存储的是其指向对象的地址(一定要清楚指针存的是地址,要想访问里面的内容加一个*就可以了),通常情况下,指针在32位系统下是4字节的,64位系统下是8字节的,无论指针是整型还是其他类型,只要你的系统不变,那输出的都是一样的。 (我个人认为数组是最特别的,和你们唠嗑一下,我为什么写这篇文章嘞?因为我想求数组的实际长度,而由于C语言太底层了,很多方便的操作没有弄,所以这些得自己写,顺便把sizeof写一下哈哈哈。) sizeof(数组名)得到的结果是整个数组所占用的内存字节数,其实我当时在想,数组名不就是指针吗?得出的结果不应该是8吗?这种想法是错误的哈❌,数组名 != 指针,不要混淆了,反正只要记住,编译器自己会识别数组和指针就可以了,其他的不用管。 最后求一下数组的长度吧(简单举例哈): 对了,字符串的末尾会自动加上一个NULL,所以会多出一个字节。(C语言不支持String类型和bool类型哦) 参数数组也是一个特殊的存在,当数组作为参数进行传递的时候,数组其实退化成了指针,不用问为什么?这是极少数的情况,所以我也没有深入了解嘻嘻嘻。 噔噔噔,有一个特殊滴出现啦,顺便给大家介绍一下字节对齐(即内存对齐) ⭐C语言中变量只能存储在它实际类型长度的整数倍地址上 什么意思呢?举个例子吧,int a = 1;由于int型是战4个字节的,所以a的存储地址只会为4的整数倍,比如0,4,8,12… 继续来介绍结构体和字节对齐: 结构体对齐要注意两个:Ⅰ、⭐C语言中变量只能存储在它实际类型长度的整数倍地址上 Ⅱ、最后输出的结果要是结构体中最长字段的最接近的整数倍(假设你算出的是7,而结构体中有int型,则应该输出8) struct abc1 { char a; //1 short b; //2 int c; //4 };输出是什么呢?是不是7?❌啦,答案是8! 详解: 吃饭啦,记得点赞啊,别白嫖啊,朋友们!!! 有错误记得评论区见哦。 大家一起学,一起进步!!! 各位宝子们如果觉滴还不错的话,可以点个赞 or 收个藏 or 打个赏哦,佛系博主一个。 |
CopyRight 2018-2019 实验室设备网 版权所有 |