类型别名typedef与#define

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29924041/article/details/54588487

类型别名typedef和#define

  1. 类型定义符号typedef
  2. #define定义类型别名
  3. 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之间的区别
  1. #define是在程序预处理阶段完成的 ,也叫宏定义
  2. #typedef是在编译的时候完成的;后者更为灵活方便
  3. #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(&current);
    }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

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页