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、字节对齐的问题相关推荐

  1. c语言union字节相同大小不同,C语言的struct/union字节对齐

    C语言的一大优势就是对内存空间的控制,当然,一般情况下对于开发人员来说都是透明的.看一个始终困扰初学者的问题:字节对齐! 先看四个重要的基本概念: 1.数据类型自身的对齐值: 对于char型数据,其自 ...

  2. C语言 typedef 和 define 区别 - C语言零基础入门教程

    目录 一.typedef 简介 1.typedef 简化复杂的类型声明 A.定义普通变量 B.定义函数指针 C.定义结构体 2.定义与平台无关的类型 二.define 简介 三.typedef 和 d ...

  3. C语言typedef与#define的区别

    typedef和#define define 没有参加编译,在预处理的时候就被替换掉了. typedef参加编译和链接.typedef是重命名,可以为枚举结构体等等重新命名,提高代码整洁. 一.typ ...

  4. c语言typedef(c语言typedef和define)

    什么是C语言 C語言是1972年左右由DennisRitchie一??人在?????室(?稱AT&T)設?開發出?淼碾?腦程式語言.他??r與KenThompson?扇斯餐??UNIX作?I ...

  5. C语言 typedef 和 #define详解

    类型定义 (typedef) 摘自 <C程序设计语言>6.7节 C语言提供了一个称为typedef的功能,它用来建立新的数据类型名,例如,声明 typedef int Length; 将L ...

  6. c语言错误c4430,C 语言 typedef 与 #define 比较

    Alvin typedef 与 #define 的区别 1. 执行时间不同 关键字 typedef 在编译阶段有效,由于是在编译阶段,因此 typedef 有类型检查的功能. #define 则是宏定 ...

  7. C语言-typedef与#define的区别

    目录 1 typedef 1.1 将复杂的声明简单化 1.2 定义平台无关的类型 1.3 与struct的结合使用 1.4 typedef使用公式 2 typedef与#define的区别 2.1 执 ...

  8. C语言学习笔记:字节对齐

    什么是字节对齐 首先给大家看段对话: 老师:小明,请读一下这本书标题. 小明:<程序员的脱发秘籍> 老师:那请说下当中的第三个字是什么? 小明:"员" 老师:那第17笔 ...

  9. 更改结构体的内存字节对齐方式--经典

    结构体字节对齐 http://blog.163.com/ecy_fu/blog/static/4445126200910603739941/ http://hi.baidu.com/skyland_l ...

  10. (转)C语言字节对齐

    图片可以在下面的博客中看到. 转自:http://blog.csdn.net/bigloomy/article/details/6633008 可能有不少读者会问,字节对齐有必要拿出来单独写一篇博客嘛 ...

最新文章

  1. Asp.net导出Excel
  2. 【CMake】Android Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )
  3. 如何帮助企业优化商业模式?看精益数据分析的“欺”与“破”
  4. 源码免杀--反调试代码,免杀爱好者必备的利剑
  5. premature end of file错误
  6. springboot jar包部署_Spring Boot项目基于Jar部署和打包详解教程
  7. 终于!孙宇晨和巴菲特吃上 3153 万元的晚餐,还送了一个比特币!
  8. 一题多解(七)—— 取两数的最大值
  9. 计算机视觉︱图像取证技术
  10. esp32-cam拍照上传,微信小程序照片显示
  11. 等价类划分法设计用例(超详细)
  12. JTT808、JTT1078、TJSATL主动安全踩坑记录
  13. C Primer Plus(6) 中文版 第6章 C控制语句:循环 6.2 while语句
  14. Unity XCode 拨号和一键加群
  15. Python为什么这么多人说好?
  16. 2019年安徽大学ACM/ICPC实验室新生赛(公开赛)
  17. 2015年自我激励及2014年的总结
  18. 数据库原理及应用(六)SQL Server关系数据库系统
  19. 如何设置和开始使用Synology NAS
  20. 计算机毕业设计ssm临沂旅游咨询系统

热门文章

  1. Android 学习笔记(5)之RxJava解析1
  2. 小米MIX 2还没上一代震撼,为什么却说雷军更自信了?
  3. LTE上报的CQI、PMI、RI
  4. 4418GPIO口调用过程
  5. 目标框选之单阶段与两阶段目标检测区别
  6. php新增的特性,PHP7新增特性
  7. 科沃斯、石头科技的扫地“茅”之争
  8. 常熟理工php实验三_三位教师获评常熟理工学院首届科研支撑教学奖
  9. Informix 常用函数一
  10. Error: Unbalanced delimiter found in string