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中定义.这是一个依赖于编译系统 ...
随机推荐
- 【转】新手该如何学python怎么学好python?
1)学好python的第一步,就是马上到www.python.org网站上下载一个python版本.我建议初学者,不要下载具有IDE功能的集成开发环境,比如Eclipse插件等. 2) 下载完毕后,就 ...
- python并发编程之多进程(实现)
一.multipricessing模块的介绍 python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiproce ...
- 华硕笔记本电脑Win10改Win7设置U盘启动
华硕笔记本电脑Win10改Win7设置U盘启动 尝试开机按ESC选择前面没有UEFI项的USB启动: 1,在BIOS设置里advanced菜单,把 Lgeacy USB support选择为enabl ...
- scanf后面跟一个getchar
scanf(“%d",&a): if(getchar() != '\n') printf();else printf(); 这种情况下,我有点迷惑,就做了个实验,结论是: 1.当输完 ...
- Ajax数据的爬取(淘女郎为例)
mmtao Ajax数据的爬取(淘女郎为例) 如有疑问,转到 Wiki 淘女郎模特抓取教程 网址:https://0x9.me/xrh6z 判断一个页面是不是 Ajax 加载的方法: 查看网页源代码, ...
- c# 对象 & 类
类定义中可以使用的访问修饰符组合 none or internal 类只能在当前工程中访问 public 类可以在任何地方访问 abstract or internal abstract 类只能在当前 ...
- python编码的那些事
字符串编码在python里是经常会遇到的问题,特别是写文件或是网络传输调用某些函数的时候. 现在来看看python中的unicode编码和utf-8编码 字符串编码的历史 计算机只能处理数字,文本转换 ...
- BZOJ 3879: SvT [虚树 后缀树]
传送门 题意: 多次询问,给出一些后缀,求两两之间$LCP$之和 哈哈哈哈哈哈哈竟然$1A$了,刚才还在想如果写不好这道题下节数学就不上了,看来是上天让我上数学课啊 $Suffix\ Virtual\ ...
- 基于Appium1.6.X的WebDriverAgent编译、安装
转自:http://www.cnblogs.com/baconLiu/p/6861431.html tips:WebDriverAgent是Appium1.6.3以后版本新添加的模块,为了让appiu ...
- WinSock IOCP 模型总结(附一个带缓存池的IOCP类)
前言 本文配套代码:https://github.com/TTGuoying/IOCPServer 由于篇幅原因,本文假设你已经熟悉了利用Socket进行TCP/IP编程的基本原理,并且也熟练的掌握了 ...