美文网首页
typedef关键字(一)

typedef关键字(一)

作者: lxr_ | 来源:发表于2021-10-22 10:45 被阅读0次
//相比宏定义define的直接替换,typedef是对类型的封装,相当于对变量起别名

#include <stdio.h>

typedef int integer;       //给int起别名
#define integer_def int    //使用define将int替换为integer

typedef int * ptrInt;      //定义ptrInt为指向整形的指针
#define ptrInt_def int*   

typedef int INT, *PTRINT;  //可以同时定义,则INT为int的别名,而PTRINT为指向int型变量的指针

typedef struct date       
{

    int year;
    int month;
    int day;

} DATE,*PDATE;           //使用typedef给struct date起别名DATE,同时起另一个指向struct date的指针PDATE

int main(int argc, char** argv)
{
    int b;
    integer a;           //使用int的别名integer
    a = 1;
    b = a;

    printf("a=%d\n", a);                    //a=1
    printf("b=%d\n", b);                   // b = 1
    printf("size of a=%d\n", sizeof(a));   // size of a = 4

    integer_def c = 1;                     //使用define也可以为int起别名

    unsigned integer_def d = 1;            //使用define定义的integer_def实现unsigned int,正确,define是将integer_def机械的替换为int   

    //unsigned integer e = 1;              //使用typedef定义的integer实现unsigned int,出错

    //******************测试typedef定义的指针类型**********
    ptrInt f, g;                           //定义两个指向整形变量的指针
    f = &a;                                //a的地址赋予f
    g = f;                                 //f赋予g,则g存放了a的地址
    printf("addr of a=%p\n", g);          //addr of a = 012FFD68        正确输出a的地址

    //******************测试define定义的指针类型**********
    ptrInt_def h, i;                       //将ptrInt_def替换为int*,只要h是指针变量,i是int型变量
    h = &a;                                //a的地址赋予h
    i = h;                                 //i赋予h,则i存放了a的地址
    printf("addr of a=%p\n",i);            //虽然可以正确输出,但会有警告(将指针存放到int型变量)

    //******************typedef简化结构类型*************
    DATE date;                             //不会出错,因为typedef给struct date起别名DATE,简化了结构体类型
    date.year = 2021;
    date.month = 10;
    date.day = 22;
    printf("日期:%d-%d-%d\n", date.year, date.month, date.day); //日期:2021 - 10 - 22

    PDATE pdate;                           //定义结构体指针
    pdate = &date;
    printf("日期:%d-%d-%d\n", pdate->year, pdate->month, pdate->day); //日期:2021 - 10 - 22
 
    system("pause");
    return 0;
}

相关文章

网友评论

      本文标题:typedef关键字(一)

      本文链接:https://www.haomeiwen.com/subject/zepcaltx.html