C语言:给结构体取别名的4种方法

0 前言

在进行嵌入式开发的过程中,我们经常会见到typedef这个关键字,这个关键字的作用是给现有的类型取别名,在实际使用过程中往往是将一个复杂的类型名取一个简单的名字,便于我们的使用。就像我们给很熟的人取外号一样,就是便于我们的记忆和使用。

1 给结构体取别名的4种方法

1.1 定义结构体时取别名(1)

示例代码:

c 复制代码
typedef struct
{
    int x;
    int y;
} test1_t;

结果:给结构体取别名为test1_t。

这种方法最简洁,但存在一个问题,如果我们定义的结构体是一个链表则无法定义一个本身结构体类型的指针。

1.2 定义结构体时取别名(2)

示例代码:

c 复制代码
typedef struct t2
{
    int x;
    int y;
} test2_t;

结果:给结构体取别名为test2_t。

这种方法比上面那种略复杂,但可以定义一个本身结构体类型的指针。在结构体内定义本身结构体类型的指针的语句:struct t2 *x;

1.3 定义结构体完成后取别名(1)

c 复制代码
struct t3
{
    int x;
    int y;
};
typedef struct t3 test3_t;

结果:给结构体struct t3取别名为test2_t。

这种方法写得更加臃肿一些,不过结构看起来更加明朗。

1.4 定义结构体完成后取别名(2)

c 复制代码
struct t3
{
    int x;
    int y;
};
typedef struct t3 *test4_t;

结果:给struct t3取别名为*test4_t,相当于test4_t是struct t3型指针类型。

这种方法可以直接给结构体取一个指针别名类型,这样取别名后定义一个结构体指针变量语句为:test4_t x;

2 结果测试

将上述的操作方法放到一个源文件内,设置并打印结构体成员的值。测试代码如下:

c 复制代码
#include "stdio.h"

typedef struct
{
    int x;
    int y;
} test1_t;

typedef struct t2
{
    int x;
    int y;
} test2_t;

struct t3
{
    int x;
    int y;
};
typedef struct t3 test3_t;
typedef struct t3 *test4_t;


int main(void)
{
    test1_t test1;
    test2_t test2;
    test3_t test3;
    test4_t test4 = &test3;
    test1.x = 1;
    test1.y = 2;
    test2.x = 1;
    test2.y = 2;
    test3.x = 1;
    test3.y = 2;
    printf("test 1 ==> x : %d, y : %d\r\n", test1.x, test1.y);
    printf("test 2 ==> x : %d, y : %d\r\n", test2.x, test2.y);
    printf("test 3 ==> x : %d, y : %d\r\n", test3.x, test3.y);
    printf("test 4 ==> x : %d, y : %d\r\n", test4->x, test4->y);
    return 0;
}

测试结果:

相关推荐
艾莉丝努力练剑1 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
Cx330❀3 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
..过云雨4 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
谱写秋天5 小时前
在STM32F103上进行FreeRTOS移植和配置(STM32CubeIDE)
c语言·stm32·单片机·freertos
我不是板神5 小时前
程序设计|C语言教学——C语言基础2:计算与控制语句
c语言
基于python的毕设5 小时前
C语言栈的实现
linux·c语言·ubuntu
promising-w10 小时前
【嵌入式C语言】六
c语言·开发语言
ankleless10 小时前
C语言(11)—— 数组(超绝详细总结)
c语言·零基础·数组·二维数组·自学·一维数组
草莓熊Lotso11 小时前
《吃透 C++ 类和对象(中):const 成员函数与取地址运算符重载解析》
c语言·开发语言·c++·笔记·其他
野生的编程萌新14 小时前
从冒泡到快速排序:探索经典排序算法的奥秘(二)
c语言·开发语言·数据结构·c++·算法·排序算法