C语言中的sizeof函数总结
sizeof函数的结果:
- 变量:变量所占的字节数。
int i = ;
printf("%d\n", sizeof(i)); // - 数组:数组所占的字节数。
int arr_int1[] = {,,,,};
int arr_int2[] = {,,,,};
printf("size_arr1=%d\n",sizeof(arr_int1)); //5*4=20
printf("size_arr2=%d\n",sizeof(arr_int2)); //10*4=40 - 字符串:其实就是加了'\0'的字符数组。结果为字符串字符长度+1。
char str[] = "str";
printf("size_str=%d\n",sizeof(str)); //3+1=4 - 指针:固定长度:4(32位地址环境)。
- 特殊说明:数组作为函数的入口参数时,在函数中对数组sizeof,获得的结果固定为4:因为传入的参数是一个指针。
int Get_Size(int arr[]) {
return sizeof(arr);
} int main() {
int arr_int[] = {,,,,};
printf("size_fun_arr=%d\n",Get_Size(arr_int)); //
}
- 特殊说明:数组作为函数的入口参数时,在函数中对数组sizeof,获得的结果固定为4:因为传入的参数是一个指针。
- 结构体
- 只含变量的结构体:
- 结果是最宽变量所占字节数的整数倍:[4 1 x x x]
typedef struct test {
int i;
char ch;
}test_t;
printf("size_test=%d\n", sizeof(test_t)); // - 几个宽度较小的变量可以填充在一个宽度范围内:[4 2 1 1]
typedef struct test {
int i;
short s;
char ch1;
char ch2;
}test_t;
printf("size_test=%d\n", sizeof(test_t)); // - 地址对齐:结构体成员的偏移量必须是其自身宽度的整数倍:[4 1 x 2 1 x x x]
typedef struct test {
int i;
char ch1;
short s;
char ch2;
}test_t;
printf("size_test=%d\n", sizeof(test_t)); //
- 结果是最宽变量所占字节数的整数倍:[4 1 x x x]
- 含数组的结构体:包含整个数组的宽度。数组宽度上文已详述。[4*10 2 1 1]
typedef struct test {
int i[];
short s;
char ch1;
char ch2;
}test_t;
printf("size_test=%d\n", sizeof(test_t)); // - 嵌套结构体的结构体
- 包含整个内部结构体的宽度(即整个展开的内部结构体):[4 4 4]
typedef struct son {
int name;
int birthday;
}son_t; typedef struct father {
son_t s1;
int wife;
}father_t; printf("size_struct=%d\n",sizeof(father_t)); // - 地址对齐:被展开的内部结构体的首个成员的偏移量,必须是被展开的内部结构体中最宽变量所占字节的整数倍:[2 x x 2 x x 4 4 4]
typedef struct son {
short age;
int name;
int birthday;
}son_t; typedef struct father {
short age;
son_t s1;
int wife;
}father_t; printf("size_struct=%d\n",sizeof(father_t)); //
- 包含整个内部结构体的宽度(即整个展开的内部结构体):[4 4 4]
- 只含变量的结构体:
C语言中的sizeof函数总结的更多相关文章
- 转]解析C语言中的sizeof
解析C语言中的sizeof 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出 了其操作数的存储大小.操作数 ...
- c语言中的rewind函数,Win CE 不支持,可用fseek函数替换
FILE *read = fopen(cXmlFile,"rb"); if (read) { fseek(read, 0L, SEEK_END); int len = ftell( ...
- c语言中的malloc函数
少壮不努力,大一的时候c语言学得不扎实,最近学数据结构的时候看到c语言中malloc函数都不知道了,这里记录一下,避免以后再忘. malloc的全称是memory allocation,中文叫动态内存 ...
- C语言中的sizeof()
sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着"辛苦我一个,幸福千万人"的伟大思想,我决定将其尽可能详细的总结一下. 但当我总结的时候才发现,这个 ...
- linux下C语言中的flock函数用法 【转】
表头文件 #include<sys/file.h> 定义函数 int flock(int fd,int operation); 函数说明 flock()会依参数operation所指 ...
- C语言中的memset函数和数组指针
代码: #include <iostream> #include <cstring> using namespace std; int main(){ ] = {}; mems ...
- C语言中的sizeof和strlen
1.sizeof是算符,strlen是函数: 2.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的: 3.大部分编译程序,在编译的时候就把sizeof计算 ...
- linux下C语言中的flock函数使用方法 .
表头文件 #include<sys/file.h> 定义函数 int flock(int fd,int operation); 函数说明 flock()会依參数operation所指 ...
- C语言中的sizeof解析
1. 定义:sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数.返回 值类型为size_t,在头文件stddef.h中定义.这是一个依赖于编译系统 ...
随机推荐
- awk 实用技巧
awk 用法:awk ' pattern {action} ' 变量名 含义ARGC 命令行变元个数ARGV 命令行变元数组FILENAME 当前输入文件名FNR 当前文件中的记录号FS 输入域分隔符 ...
- Nginx+Geoserver部署所遇问题总结
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 该问题的最终解决离不开公司大拿whs先生的指点,先表示感谢. ...
- 模块(module)
1.模块加载 import math //import后面跟模块名 from module1 import module11 //module1是一个大模块,里边有子模块module11,调用这个 ...
- Spring Boot快速入门(最新)
本章通过完成Spring Boot基础项目的构建并实现一个简单的Http请求处理,让大家对Spring Boot有一个初步的了解,并体验其结构简单.开发快速的特性.预计阅读及演练过程将花费约5分钟. ...
- Cannot read property 'component' of undefined 即vue-router 0.x转化为2.x
原文链接:http://blog.csdn.net/m0_37754657/article/details/71269988 由于vue版本为1.0,没有一些vue-router指令:因而需要vue- ...
- HDU 3595 GG and MM [Every-SG]
传送门 题意: 两个数$x,y$,一个人的决策为让大数减去小数的任意倍数(结果不能为负),出现0的人胜 一堆这样的游戏同时玩 Every-SG 游戏规定,对于还没有结束的单一游戏,游戏者必须对该游戏进 ...
- python3图像识别库安装与使用
pytesseract库的安装 因为用的win10,就直说windows上面的安装了.其实就是pip安装就完事了. $ pip install pytesseract 安装了这个还不算完,得安装Tes ...
- bootloader总体操作设计
bootloarder设计蓝图(不想做设计师的程序员不是好程序员):bootloarder的作用:将linux内核启动起来设计方法:模仿u-bootu-boot:支持多种嵌入式cpu的bootloar ...
- yii2 源码分析Behavior类分析 (四)
Behavior类是所有事件类的基类,它继承自object类 Behavior类的前面注释描述大概意思: * Behavior类是所有事件类的基类 * * 一个行为可以用来增强现有组件的功能,而不需要 ...
- Go生成easyjson文件
[生成easyjson文件] cd services/api_adapter/aliafp #先删除已有的aliafp_easyjson.go文件,并且把除了aliafp.go以外的其他文件移动到 ...