C语言typedef和define、字节对齐的问题
typedef
typedef 用来声明一个新类型名,用新的类型来替换一个已经存在的类型,方便移植。
typedef 现有类型 新类型名 ;
=> 新类型名 就和 现有的类型 是一样
如:
typedef unsigned char uint_8; uint_8 a;<=> unsigned char a;
typedef struct student {int num;int age;char name[32];} STU; //结构体类型名
STU==struct student
typedef void func_type(int , char);
定义了一个没有返回值,并且带有一个int和一个char类型参数的函数类型。这个函数类型名是func_type,也就是说可以用func_type替代这个函数类型.
typedef 总结:
typedef 加在定义的对象(变量、函数、指针)的前面,定义对象名,就变成了一个新的类型名
#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用,而typedef有自己的作用域。
注:
#define和typedef的区别
#define MMM struct s*
typedef struct s* NNN;
MMM p1, p2;
//struct s* p1, p2;
//用define定义 *跟p1跑了,所以p2没有*NNN p3, p4;
//(struct s*) p3, p4;
p1 -> struct s* 类型的指针变量
p2 -> struct s 类型结构体变量
p3 -> struct s* 类型的指针变量
p4 -> struct s* 类型的指针变量
字节对齐的问题
CPU底层为了访问的效率出发,一般会要求,任何对象的地址必须是对齐的。
自然对齐:
数据地址是数据长度的倍数
n-字节对齐:
地址是n的倍数(n一般为2的x次幂)
结构体的每个成员通常会有一个默认的对齐方式,成员变量
将按照(除非程序员有其他的对齐的要求)默认的对齐方式是: 自然对齐
struct test {char a; //a的地址必须是1的倍数 int b; //b的地址必须是4的倍数 };struct test t;sizeof(t) == ? 8 a _ _ _ b b b b
在64bits ,编译器(GNU) :
char -> 一字节对齐
short -> 二字节对齐
int -> 4字节对齐
long -> 8字节对齐
long long -> 8字节对齐
float -> 4字节对齐
double -> 8字节对齐
long double -> 16字节对齐
pointer 指针类型 -> 8字节对齐
…
对于结构体,按最大的原始类型的对齐方式对齐!
struct MixedData{char D1;short D2;int D3;char D4;};struct test {char s; struct MixedData M; };sizeof(struct test) == ? 16s _ _ _ D1 D2 D2 _D3 D3 D3 D3D4 _ _ _
C语言typedef和define、字节对齐的问题相关推荐
- c语言union字节相同大小不同,C语言的struct/union字节对齐
C语言的一大优势就是对内存空间的控制,当然,一般情况下对于开发人员来说都是透明的.看一个始终困扰初学者的问题:字节对齐! 先看四个重要的基本概念: 1.数据类型自身的对齐值: 对于char型数据,其自 ...
- C语言 typedef 和 define 区别 - C语言零基础入门教程
目录 一.typedef 简介 1.typedef 简化复杂的类型声明 A.定义普通变量 B.定义函数指针 C.定义结构体 2.定义与平台无关的类型 二.define 简介 三.typedef 和 d ...
- C语言typedef与#define的区别
typedef和#define define 没有参加编译,在预处理的时候就被替换掉了. typedef参加编译和链接.typedef是重命名,可以为枚举结构体等等重新命名,提高代码整洁. 一.typ ...
- c语言typedef(c语言typedef和define)
什么是C语言 C語言是1972年左右由DennisRitchie一??人在?????室(?稱AT&T)設?開發出?淼碾?腦程式語言.他??r與KenThompson?扇斯餐??UNIX作?I ...
- C语言 typedef 和 #define详解
类型定义 (typedef) 摘自 <C程序设计语言>6.7节 C语言提供了一个称为typedef的功能,它用来建立新的数据类型名,例如,声明 typedef int Length; 将L ...
- c语言错误c4430,C 语言 typedef 与 #define 比较
Alvin typedef 与 #define 的区别 1. 执行时间不同 关键字 typedef 在编译阶段有效,由于是在编译阶段,因此 typedef 有类型检查的功能. #define 则是宏定 ...
- C语言-typedef与#define的区别
目录 1 typedef 1.1 将复杂的声明简单化 1.2 定义平台无关的类型 1.3 与struct的结合使用 1.4 typedef使用公式 2 typedef与#define的区别 2.1 执 ...
- C语言学习笔记:字节对齐
什么是字节对齐 首先给大家看段对话: 老师:小明,请读一下这本书标题. 小明:<程序员的脱发秘籍> 老师:那请说下当中的第三个字是什么? 小明:"员" 老师:那第17笔 ...
- 更改结构体的内存字节对齐方式--经典
结构体字节对齐 http://blog.163.com/ecy_fu/blog/static/4445126200910603739941/ http://hi.baidu.com/skyland_l ...
- (转)C语言字节对齐
图片可以在下面的博客中看到. 转自:http://blog.csdn.net/bigloomy/article/details/6633008 可能有不少读者会问,字节对齐有必要拿出来单独写一篇博客嘛 ...
最新文章
- Asp.net导出Excel
- 【CMake】Android Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )
- 如何帮助企业优化商业模式?看精益数据分析的“欺”与“破”
- 源码免杀--反调试代码,免杀爱好者必备的利剑
- premature end of file错误
- springboot jar包部署_Spring Boot项目基于Jar部署和打包详解教程
- 终于!孙宇晨和巴菲特吃上 3153 万元的晚餐,还送了一个比特币!
- 一题多解(七)—— 取两数的最大值
- 计算机视觉︱图像取证技术
- esp32-cam拍照上传,微信小程序照片显示
- 等价类划分法设计用例(超详细)
- JTT808、JTT1078、TJSATL主动安全踩坑记录
- C Primer Plus(6) 中文版 第6章 C控制语句:循环 6.2 while语句
- Unity XCode 拨号和一键加群
- Python为什么这么多人说好?
- 2019年安徽大学ACM/ICPC实验室新生赛(公开赛)
- 2015年自我激励及2014年的总结
- 数据库原理及应用(六)SQL Server关系数据库系统
- 如何设置和开始使用Synology NAS
- 计算机毕业设计ssm临沂旅游咨询系统