类型别名typedef和#define
- 类型定义符号typedef
- #define定义类型别名
- typedef和#define之间的区别有那些
类型别名typedef
C语言中不仅提供了丰富的数据类型,而且也允许用户自己去定义类型说明符,也就是允许用户为数据类型取“别名”,类型定义符号typedef可以用来完成此功能;
类型别名的定义:
使用typedef
typedef 原来类型名 新类型名;
如 typedef struct student Stu;//将student结构体取别名Stu
使用typedef定义数组,结构体,指针等类型别名将会带来很大的方便,不仅使书写简单,而且会使程序的可读性增加很多;
易于理解,便于一直,可读性好;
typedef float Dollors;
Dollors crash_in.crash_out;
可以为结构体来声明一个类型别名:
typedef struct student
{
char name[20];
int age;
char sex;
}Stu;
Stu stu = {"jack",20,'F'};
也可以这样去定义,在声明之后再去定义:
struct student
{
char name[20];
int age;
char sex;
};
typedef struct student Stu;
或者可以定义结构体指针
typedef struct student* Stup;
Stup为结构体指针变量;
使用#define宏定义
#define 新类型名 原类型名
如:#define INTEGER int
INTEGER a = 100;
define和typedef之间的区别
- #define是在程序预处理阶段完成的 ,也叫宏定义
- #typedef是在编译的时候完成的;后者更为灵活方便
- #define在处理指针方面处理不好,typedef处理更加合适
如:typedef char* ptr;
ptr a,b,c;//a,b,c都是指针类型
#define ptr char*;
ptr a,b,c;//此时a是字符指针,但是b,c都是char类型的,分开定义的话,那就可以`
下面是代码部分:通过类型别名来打造我们自己的时钟:
#include<stdio.h>
#include<time.h>
struct Clock{
int sec;
int min;
int hour;
};
typedef struct Clock CLOCK ;
//秒表+1操作
void increment(CLOCK *p);//结构体指针传入
//显示出结果
void show(CLOCK *p);
void delay1();
int main(void)
{
CLOCK c = {0,0,12};
int i;
for(i = 0;i < 100;i++)
{
delay1();
increment(&c);
show(&c);
}
return 0;
}
void delay1()
{
time_t start,current;
time(&start);
do{
time(¤t);
}while((current-start) != 1);//不等于1的时候,我们继续循环,如果等于1的话,那就退出
}
void increment(CLOCK *p)
{
p->sec++;
if(p->sec == 60)
{
p->sec = 0;
p->min++;
if(p->min == 60){
p->min = 0;
p->hour++;
}
}
}
void show(CLOCK *p)
{
printf("%02d:%02d:%02d\n",p->hour,p->min,p->sec);
}
谢谢大家的访问,欢迎持续访问.代码可以直接run