//相比宏定义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;
}
网友评论