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中定义.这是一个依赖于编译系统 ...
随机推荐
- Linux Shell 文件描述符 及 stdin stdout stderr 重定向
Abstract: 1) Linux Shell 命令的标准输入.标准输出.标准错误,及其重定位: 2)Linux Shell 操作自定义文件描述符: 文件描述符是与文件相关联的一些整数,他们保持与已 ...
- JavaSE基础篇—MySQL三大范式—数据库设计规范
1.概 念 范式是一种符合设计要求的总结,要想设计一个结构合理的关系型数据库,必须满足一定的范式.各个范式是以此嵌套包含的,范式越高,设计等级越高,在现实设计中也越难实现,一般数据库只要打 ...
- 浅谈ES6
ECMAScript6.0(简称ES6)是javaScript语言的下一代标准,已经在2015年6月正式发布了.它的目标,使得javaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言 ...
- Ajax异步信息抓取方式
淘女郎模特信息抓取教程 源码地址: cnsimo/mmtao 网址:https://0x9.me/xrh6z 判断一个页面是不是Ajax加载的方法: 查看网页源代码,查找网页中加载的数据信息,如果 ...
- python3的zip函数
zip函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个tuple,然后返回一个可迭代的zip对象. 这个可迭代对象可以使用循环的方式列出其元素 若多个可迭代对象的长度不一致,则所返回的 ...
- Spring mybatis源码学习指引目录
前言: 分析了很多方面的mybatis的源码以及与spring结合的源码,但是难免出现错综的现象,为了使源码陶冶更为有序化.清晰化,特作此随笔归纳下分析过的内容.博主也为mybatis官方提供过pul ...
- Java内存回收机制基础[转]
原文链接:http://blog.jobbole.com/37273/ 在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了J ...
- 一个巨low的“2048”
代码就是这样,做的不是4*4而是一个2*2 #include<stdio.h>#include<stdlib.h>#include<time.h>int main( ...
- 一步一步从原理跟我学邮件收取及发送 12.telnet命令行收一封信pop3
本系列上一篇文章中我们就说到了,这一次我们要说 pop3 收信了.虽然我觉得应该先说完 mime 格式,不过估计大家已经不耐烦了 -- 怎么老在说发送啊?我们要看收取! 好吧,来啦,来啦!收取邮 ...
- java Mac自动化-java和ant环境搭建
本文旨在帮助读者介绍,如果一个测试工程师拿到了mac本,该如何在本地搭建java和ant环境 其实在几年前,我们还大多使用的是windows本,而且我们也会比较善于使用windows笔记本,但自从ma ...