C语言——typedef关键字

typedef三种功能

  1. 起别名
    第一种方式起别名方式
struct person
{
    char name[20];
    int age;
};

//为上面结构体构造的新数据类型起别名
typedef struct person Person;

int main(void)
{
    struct person a = {"小明",12};//直接使用结构体变量名创建变量
    Person b = {"小王",11};   //使用别名创建变量

    return 0;
}

第二种方式起别名方式

//第二种起别名方式
//直接在结构体前加typedef创建

typedef struct student
{
    int ID;
    int garden;
}Student;

int main(void)
{
    //第二种方式
    Student c = {12312,5}; 
    return 0;
}
  1. 区分数据类型
void test()
{
    char* p, q;//此处的 p q,p为指针变量、q为字符变量

    //通过打印其所占内存大小确定两者数据类型不一样
    //指针变量占4个字节  字符型变量占1个字节
    printf("p is %d\n",sizeof(p));
    printf("q is %d\n", sizeof(q));
}
int main(void)
{
    //typedef区分数据类型
    test();
    return 0;
}

窗口打印出的数据:

p is 4
q is 1

由上面试验得出使用

charp,q;
得出p为指针变量,q为字符变量,与其他数据类型不一样。可以使用typedef为char
等指针变量起别名,这样别名同时创建的变量类型相同。可参考下面示例:

void test()
{
    //使用typedef创建指针变量数据别名同时创建变量
    typedef char* PCHAR;
    PCHAR ptr, qtr;
    printf("使用typedef创建别名之后\n");
    printf("p is %d\n", sizeof(ptr));
    printf("q is %d\n", sizeof(qtr));
}
int main(void)
{
    //typedef区分数据类型
    test();
    return 0;
}

使用typedef创建别名之后
p is 4
q is 4
通过打印出的结果可知两个变量都为指针变量

  1. 提高可移植性
    例如:在C89标准中我们不可以使用C99标准中的long long数据类型。如果我们把一个含有多个long long数据类型的代码移植到C89标准模式下执行我们必须对long long数据类型作出更改才能执行,为了挺高程序移植性,我们可以对long long使用typedef起一个新名字,再C89标准下作出更改是就不比一一更改,只需要更改typedef语句就可以。
void TypedefMoveTest()
{
    typedef long long Lstruct;
    Lstruct a;
    long long b;

    printf("a is %d\n", sizeof(a));
    printf("b is %d\n", sizeof(b));
}
int main(void)
{
    //使用typedef提高可移植性
    TypedefMoveTest();
    return 0;
}

打印使用typedef和未使用typedef long long数据类型的大小

a is 8
b is 8

C语言中,可以使用typedef关键字来定义自己习惯的数据类型名称。这样可以简化代码并增加可读性。例如,可以使用typedef定义一个自定义的数据类型名称,比如BOOL类型,可以将其定义为int类型,并使用#define定义True为1。这样,在代码中就可以直接使用BOOL作为数据类型,并赋值为True或False。另外,结构体也可以使用typedef来定义,这样在声明结构体变量时就不需要再加上struct关键字了。例如,可以使用typedef定义一个结构体类型为lept_value,然后在声明结构体变量时就可以直接使用lept_value而不需要加上struct关键字。结构体变量在赋值的同时也可以对结构体中的变量进行赋值。例如,在定义一个结构体Dog时,可以在声明结构体变量dog1时同时对其进行赋值,如dog1={4,'m'}。这样可以方便地初始化结构体变量的值。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [C语言中结构体用到的typedef](https://blog.csdn.net/weixin_44477424/article/details/122796704)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C语言——结构体与typedef](https://blog.csdn.net/fmj2801876977/article/details/129068033)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值