目录
一、#definef (宏定义)
二、typedef
1、typedef是干什么的?
2、typedef代替复杂类型
一、#definef (宏定义)
#define 可以定义一个标识符来表示一个常量,在后面的程序代码中就可以用这个标识符来代表这个常量。 格式如下:
#define 标识符 常量 // 注意后面不加“ ; ”
特点:宏定义的标识符不占内存,只是一个符号,预编译后就不存在了。
用#define可以让我使用时更方便灵活,当我们在程序中频繁使用某一个数据,当我们需要改变这个数据时,就得把这么多全部改一遍,但是当我们用宏定义后,仅需要改变一下宏定义的常量。
下面举个例子,求一个正方体的一面的面积,表面积,体积
//求一个正方体的一个面的面积,表面积,体积
#include <stdio.h>#define A 4 //假设正方体的棱长是4 ,用A来表示 int main()
{int area_1,area,vlm; area_1 = A * A; //一个面的面积 area = 6 * A * A; //表面积 vlm = A * A *A; //体积printf("area_1: %d\narea: %d\nvolume: %d\n",area_1,area,vlm);return 0; }
用到了很多正方体棱长A,如果棱长改变再计算得话 仅仅改变宏定义时值就可以。
另外,还有一个“ #undef 标识符 ”,它的作用是终止这个宏定义标识符的作用域,把他放在想结束该宏定义的地方即可,一般是用不到的。
二、typedef
1、typedef是干什么的?
我们可以用typedef指定新的类型名来代替已有的类型名。
typedef 已有类型名 新类型名 ;
例如, typedef int G; 就是用G代表 int 。
typedef char Str; char a; 和 Str a; 这两条句子等价
2、typedef代替复杂类型
typedef 除了可以代替int char float等这些简单的类型,还可以代替一些复杂的。
(1)命名一个新的类型名代表结构体
typedef struct
{int a;char b;flaot c;
} Day; //这里Day就代表这个结构体类型Day stu; //定义结构体变量,等价于下面程序
-------------------------------------------------------
struct
{int a;char b;float c;
} stu; //与上面等价
(2)命名一个新的类型名代表数组类型
typedef int Stu[10]; //声明Stu为整型数组类型名
Stu a; //定义a为整形数组变量,有10个元素
等价于:
int a[10];
(3)命名一个新的类型名代表指针类型
typedef int* Pp; //声明Pp为整型指针变量
Pp a; //定义a为整型指针变量
(4)命名一个新的类型名代表指向函数的指针类型
typedef int (*P)(); //声明P为指向函数的指针类型,该函数返回整数
P p1,p2; //定义p1,p2为指向函数的指针类型的变量