黑马程序员——C语言——typedef和#define
2015-12-09 09:32
267 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. typedef
typedef是为数据类型起别名。
使用方式:typedef 原类型名 新类型名;
给基本数据类型起别名 eg: tepedef int myINT;
给数组起别名:typedef int ARRAY[5]; ARRAY a,b; //相当于int a[5],b[5];
给结构体起别名
struct Person{
char *name;
int age;
};
typedef struct Person p;
给枚举类型起别名:typedef enum Sex {kSexMale,kSexFemal} ISEX;
给函数指针起别名:typedef int (*FUN) (int, int); //FUN是一个别名
FUN f1,f2; //f1,f2都是函数指针。
2. #define——定义宏
无参宏定义:
#define 标识符 字符串 //标识符是宏名,字符串可以使常量、变量、表达式。
宏替换:源程序在编译之前,由预处理程序对我们写的源代码进行处理,会把源代码中所有出现宏名的地方一律使用宏的字符串去替换。
注意:
预处理指令经常写在函数之前
宏不是一个语句,是一个预处理指令,所以不需要加分号
宏有作用域,使用#undef可以取消宏定义
字符串中出现的宏不会被替换
宏可以嵌套定义:
#define R 4
#define PI 3.14
#define PI*R*R
可以使用宏起别名:#define INT1 int INT1 a=10;
有参宏定义:
#define SUM(a) a+a
有参宏实使用注意:
宏的形参之间可以出现空格,但是宏名和形参之间不能出现空格
在带参宏定义中,形参不分配内存单元,不需要写类型,不同于函数
有参宏的参数最好用括号括起来
宏定义可以定义多个语句
eg:#define M3(m,n) m=a+2;n=a*2;
3. typedef和#define的区别
#define是一个预处理指令,只是进行就简单的宏替换。
typedef是在编译时完成的,不是简单的替换,而是对类型说明符的重新命名。
1. typedef
typedef是为数据类型起别名。
使用方式:typedef 原类型名 新类型名;
给基本数据类型起别名 eg: tepedef int myINT;
给数组起别名:typedef int ARRAY[5]; ARRAY a,b; //相当于int a[5],b[5];
给结构体起别名
struct Person{
char *name;
int age;
};
typedef struct Person p;
给枚举类型起别名:typedef enum Sex {kSexMale,kSexFemal} ISEX;
给函数指针起别名:typedef int (*FUN) (int, int); //FUN是一个别名
FUN f1,f2; //f1,f2都是函数指针。
2. #define——定义宏
无参宏定义:
#define 标识符 字符串 //标识符是宏名,字符串可以使常量、变量、表达式。
宏替换:源程序在编译之前,由预处理程序对我们写的源代码进行处理,会把源代码中所有出现宏名的地方一律使用宏的字符串去替换。
注意:
预处理指令经常写在函数之前
宏不是一个语句,是一个预处理指令,所以不需要加分号
宏有作用域,使用#undef可以取消宏定义
字符串中出现的宏不会被替换
宏可以嵌套定义:
#define R 4
#define PI 3.14
#define PI*R*R
可以使用宏起别名:#define INT1 int INT1 a=10;
有参宏定义:
#define SUM(a) a+a
有参宏实使用注意:
宏的形参之间可以出现空格,但是宏名和形参之间不能出现空格
在带参宏定义中,形参不分配内存单元,不需要写类型,不同于函数
有参宏的参数最好用括号括起来
宏定义可以定义多个语句
eg:#define M3(m,n) m=a+2;n=a*2;
3. typedef和#define的区别
#define是一个预处理指令,只是进行就简单的宏替换。
typedef是在编译时完成的,不是简单的替换,而是对类型说明符的重新命名。
#define INT1 int* typedef int* INT2; INT1 a1,b1; //a1是一个指针变量,但b1是一个普通变量 INT2 a2,b2; //a2,b2都是一个指针变量
相关文章推荐
- C语言的声明与定义
- C++重载、重写、重定义
- C++类下的学习——模拟电梯的实现
- C++智能指针使用总结
- C语言的基础知识1
- 详解C语言printf函数以及%占位符知识
- 【日记-C语言】慢条斯理的编了三四个小时的ACM“滑雪”(题-码-体会)
- C语言内存问题
- vs c++配置项目
- 常见C/C++ XML解析器比较
- C++各大名库的介绍
- C语言结构体的定义和使用
- 归并排序(c语言)
- C++运算符重载以及友元
- Effective C++ 读书笔记2
- 郑州大学C语言实验报告册
- leetcode笔记:Word Search
- C++ 类的构造函数
- 我们学不会的C语言的最大敌人是谁?
- c++拾遗-----开始学习c++