漫谈结构体

本文详细介绍了C/C++编程中结构体的使用,包括自定义数据类型、匿名结构体的临时和嵌套应用、递归结构体(动态链接)的区别,以及typedef关键字在定义别名提高代码可读性方面的应用。
摘要由CSDN通过智能技术生成

注意:

1.结构体是自定义数据类型,定义之后使用就跟使用库自带的int这些数据类型一样的。

2.定义结构体类型不会分配内存空间,定义变量才会。

1.匿名结构体(声明时创建变量,不然没啥用)

匿名结构体是没有定义类型名的结构体。它通常用于两种情况:

  1. 临时使用:匿名结构体可以在不定义具体类型的情况下快速创建一个结构体对象,并且可以在需要时直接使用。

  2. 嵌套结构体:匿名结构体可以作为另一个结构体中的字段,用于表示某个概念或属性的组合。这样可以在结构体中直接访问匿名结构体的字段,简化了代码结构

struct{
	char name[20];
	int age;
};

2.嵌套结构体

struct Employee {

    struct {
        char name[20];
        int age;
    } person;

    char department[20];
};

3.递归结构体(实现动态链接)

这两个结构体的定义在语法上有细微的区别。

第一个结构体的定义如下:

struct Node {
    int data;
    struct Node *next;
};

在这个定义中,struct Node明确指明了next成员的类型是指向struct Node类型的指针。在C语言中,结构体的成员访问需要使用->操作符。

第二个结构体的定义如下:

struct Node {
    int data;
    Node *next;
};

在这个定义中,Node是一个不完整的类型,没有使用struct关键字来指明它是一个结构体。这种写法在C语言中是不合法的,编译器会报错。

因此,这两个定义的区别在于对next成员类型的指定方式。第一个定义使用了struct Node *来明确指定next的类型是指向struct Node类型的指针;而第二个定义中,Node是一个不完整的类型,缺少了struct关键字,导致编译错误。

在C++语言中,可以使用Node来代替struct Node,因为C++允许直接使用结构体名字来访问成员(在C++中,默认的访问控制是public)。但是在C语言中,这种写法会导致编译错误。

4.常规结构体

以C语言举例

自定义数据类型

struct student{
	char name[20];
	int age;
};

再创建struct student类型变量a

int main() {

	struct student a;
	return 0;
}

也可以定义数据类型同时创建变量

struct student{
	char name[20];
	int age;
}a;

5.typedef的使用

通过使用typedef给数据类型起简洁的别名,从而提高代码的可读性和简洁性

在C语言中,typedef关键字用于为已有的数据类型取一个新的别名。它的使用规则如下:

  1. typedef的基本语法是:typedef 原类型名 新类型名

  2. typedef可以用于为基本类型、指针类型、数组类型和结构体类型等定义别名。

  3. 当使用typedef为一个结构体类型定义别名时,可以在结构体的定义中直接使用该别名,也可以在定义结构体变量时使用该别名。

  4. 如果在结构体定义时使用了typedef关键字,则不需要再写struct关键字来引用该结构体。

  5. typedef定义的别名,可以在当前作用域中使用,也可以在其他作用域中使用。

单别名
typedef struct Node {
	int data;
	Node* next;
}Node;
多别名(简单叠加)
typedef struct Node {
	int data;
	Node* next;
}Node,*Linklist;

Node是struct Node结构体类型的别名,可使用Node a;创建对应的变量

Linklist 是指向struct Node结构体类型的指针的别名,可使用Linklist a;创建对应的指针,而不需要声明指针变量时写明*。

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值