c语言 sizeof理解
1、基本数据类型 char :1 short:2 int 4 long 4 long long :8 float:4 double :8字节。
2、数组:对应的基本数据类型的sizeof值*长度 例如 int arr[20] ; sizeof(arr) 的值就是 80。
3、结构体类型:
A:
结构体类型的sizeof的返回值不是将内部的值简单的相加,而是根据内部最大的数据类型分配地址空间的 ,
以最大数据类型所占字节为基本单位增加空间。且一定是最大值的整数倍。举例如下
struct test {
int num;
char ch;
double dou;
}te;
则sizeof(te)的值不是13而是16,只是为什么了 ,我们来分析一下,就如上面所说最大类型为double,他的值
为8,16真好是他的2倍,以为一个double占了8个字节,就还剩下8个字节,int 占4个 char 占1个 所以说其实还有
3个字节根本就没用,但这就结构体分配内存的规则。
B:
现在我们将在结构体内部添加一个long类型,看看结果如何
struct test {
int num;
char ch;
double dou;
long l;
}te;
此时sizeof(te)的值应该就是24字节,可以自己试试以为一个double 一个int 一个long就是16字节,还多一个char
则还要分配8个字节出来。
C:
另外如果如果结构体中存在数组类型,不影响上述配备,直接加上数组的大小 如下
struct test {
int num;
char ch;
double dou;
long l;
double d[3];
}te;
此时sizeof(te) 的值为48,直接24+24。
D:
最后结构体中有结构体类型,不会一个结构体类型为最大类型值,而是内部结构体中的最大值和最大值类型比较,取最大的。
struct test2 {
struct test te;
int i;
}te2;
则sizeof(te2)的值为56
补充 ,如int arr[3]是数组类型的int,也要参与比较。
c语言 sizeof理解的更多相关文章
- C语言-sizeof()与strlen()的区别【转】
先看看sizeof() 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是 ...
- 深入理解C语言-深入理解指针
关于指针,其是C语言的重点,C语言学的好坏,其实就是指针学的好坏.其实指针并不复杂,学习指针,要正确的理解指针. 指针是一种数据类型 指针也是一种变量,占有内存空间,用来保存内存地址 指针就是告诉编译 ...
- 深入理解C语言-深入理解数组
数组,作为C语言中常见的复杂数据类型,了解其本质有助于深入了解C语言 数组概念 元素类型角度:数组是相同类型的变量的有序集合测试指针变量占有内存空间大小 内存角度:联系的一大片内存空间 数组初始化 数 ...
- 深入理解C语言-深入理解内存四区
数组与指针 当数组做函数参数的时候,会退化为一个指针 此时在函数内是得不到数组大小的 因此,数组做函数参数的时候需要传递数组大小,也就是多传递一个参数 void func(int arr[], int ...
- 深入理解C语言-深入理解void
void的字面意思是"无类型",void *则为"无类型指针",void *可以指向任何类型的数据 void含义 void几乎只有注释和限制程序的作用,定义一个 ...
- C语言 指针理解
1.指针 指针全称是指针变量,其实质是C语言的一种变量.这种变量比较特殊,通常他的值会被赋值为某个变量的地址值(p = &a),然后我们可以使用 *p 这样的方式去间接访问p所指向的那个变量. ...
- C语言 函数理解(以数组做参数)
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int run(int *p){ // ...
- C语言sizeof
一.关于sizeof 1.它是C的关键字.是一个运算符,不是函数: 2.一般用法为sizeof 变量或sizeof(数据类型):后边这种写法会让人误认为是函数,但这种写法是为了防止和C中类型修饰符(s ...
- C语言sizeof陷阱
执行以下程序,查看输出: #include <stdio.h> #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0])) int ...
随机推荐
- Generate input file for OVITO
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- jqGrid的autoencode参数设置为true在客户端可能引发的编码问题
不久前使用jqGrid+MVC做过一段时间开发. 一开始,分页参数几乎都是默认值,jqGrid的分页功能很好用. 考虑到each input is evil,我们的系统对安全性又有较高要求,所以,为了 ...
- ASP.NET MVC 5 -从控制器访问数据模型
在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里. 在开始下一步前,先Build一下应用程序(生 ...
- jsp的 javascript中 嵌套 html 注释
看到公司的代码,我也是蛋疼了,各种乱. 还发现有很多的jsp的 javascript中 嵌套 html 注释, 这个可行? 我之前可是没用过. 后面查找各种资料发现,这个也是可行的,主要是为了兼容不支 ...
- 解决vue与传统jquery插件冲突
比如基于jquery的select2插件,在vue下单独用有很多问题,其实对于这类插件,可以用vue的自定义指令和组件来包装,解决冲突的问题.引用官方vue1.0和2.0的两个例子,学习一下. 例子1 ...
- Android开发学习之路-Android Studio真神器!
放假之后电脑配置升级就开始用Android Studio(下面简称AS)了,那个酸爽真的不是一般的啊,这里开一篇博客来记录下AS里面各种酷炫的功能,有更好玩的,大家不要吝啬,评论告诉我吧! 最近And ...
- iOS 之APP上架
前几天在忙着上线,尽管之前已经上线过一次,但由于本身比较菜,还是状况百出. 好在今天终于成功提交,因此来写写心得. 如果是第一次上线,推荐这篇文章: http://jingyan.baidu.com/ ...
- hudson部署过程
hudson部署过程: java安装 http://developer.51cto.com/art/201504/470683.htm tomcat安装 http://blog.csdn.net/hu ...
- OpenCASCADE Conic to BSpline Curves-Parabola
OpenCASCADE Conic to BSpline Curves-Parabola eryar@163.com Abstract. Rational Bezier Curve can repre ...
- 把《c++ primer》读薄(4-1 c和c++数组)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. c和c++的数组和指针都属于低级的复合数据类型,比如c++的数组,类似vector容器,指针类似迭代器.低级的数据类型优势是速度 ...