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中定义.这是一个依赖于编译系统 ...
随机推荐
- Asp.net Core 入门实战 2.请求流程
Asp.Net Core 是开源,跨平台,模块化,快速而简单的Web框架. Asp.net Core官网的一个源码合集,方便一次性Clone,喜欢的(Star),本系列持续更新,也可以通过我的网站访问 ...
- ATS日志说明
在ATS日志中我们经常遇到形形色色的缓存结果码,为了更清晰地认识它们,相关资料整理到这里: TCP_HIT 请求对象的一份合法拷贝被缓存,ATS将发送该对象给client TCP_MISS 请求对象未 ...
- JAVA中的数据存储空间简述
在 JAVA 中,有六个不同的地方可以存储数据: 1. 寄存器( register ): 最快的存储区,因为它位于不同于其他存储区——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进 ...
- 07_Python变量内存地址、小数据池
一.变量在内存中的地址 变量:用来标识(identify)一块内存区域.为了方便表示内存,我们操作变量实质上是在操作变量指向的那块内存单元.编译器负责分配.我们可以使用Python内建函数id()来获 ...
- jQuery控制input只能输入两位数字和小数(金额)
function num(obj){ obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字"和". ...
- zalenium 应用
zalenium是一个Selenium Grid扩展,用Docker容器动态扩展你的本地网格.它使用docker-selenium在本地运行Firefox和Chrome中的测试,如果需要不同的浏览器, ...
- JDBC为什么要使用PreparedStatement而不是Statement
PreparedStatement是什么? PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatemen ...
- BZOJ 1115: [POI2009]石子游戏Kam [阶梯NIM]
传送门 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜 ...
- vue2.0父子组件之间通信
父组件是通过props属性给子组件通信的来看下代码: 父组件: <parent> <child :child-com="content"></chil ...
- iPad Pro 10.5+Apple Pencil之专注文献阅读与笔记效率的App综述
先谈谈我对笔记类App的几点要求--原则是取其精华,略其糟粕,毕竟开发者们还在,App就会不断地被改进: 增删快捷方便:如完美支持Apple Pencil,特定场景下强大的录音功能,单词或短句涂改即可 ...