typedef struct和struct的几种情况

本文详细介绍了在C语言中定义结构体的六种不同方式,包括直接定义、使用typedef等,并通过示例代码展示了每种定义方法的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C中,定义一个结构,可以有一下几种

1.先定义结构体,再定义变量,这种方式不能省略struct关键字

struct  student
{ 
 int age;
 char* name;
};
struct student st1,st2;

2.定义结构体的同时定义变量

struct student
{
 int age;
 char*name;
}st1,st2;

3.直接定义变量,这种定义方式下,不能后续定义其他诸如st3,st4这样的变量

struct
{
 int age;
 char *name;
}st1,st2;

4.用typedef定义结构,这个方法相比第一种方式,在定义变量的时候省略了struct关键字

typedef struct 
{
 int age;
 char*name;
}student;
student st1,st2;

5.用typedef定义一个别名,给结构体student定义一个别名mystu,后面可以用mystu定义变量

typedef struct student
{
 int age;
 char*name;
}mystu;
mystu st1;

6.用宏定义构体的成员,这种方式实际上可以应用在上面的几种方式里面,简而言之就是结构体的成员定义的时候用宏来实现

#define STUDENT int age;\
char* name;
struct student
{
STUDENT
};
struct student


好的,让我为你解释一下 `typedef struct linknode` 普通的 `struct` 定义之间的区别。 ### 区别详解: #### 1. 普通结构体声明 (`struct`) 当你仅使用 `struct` 声明一个新的数据类型时,默认需要每次都带上 `struct` 关键字来引用它。例如: ```c // 定义一个名为 Node 的结构体 struct Node { int data; struct Node* next; // 引用自身的时候要带 "struct" }; ``` 每当你要创建该类型的变量、指针等都需要显式地加上 `struct`: ```c struct Node node1; struct Node *ptr = &node1; ``` #### 2. 使用 `typedef` 通过添加 `typedef`, 我们可以给这个自定义的数据类型起个别名,之后就不再需要每次都要加前缀了,这使得代码更简洁易读。 ```c // 给结构体取了个新名字叫做 LinkNode typedef struct LinkNode_ { int value; struct LinkNode_* prev; /* 这里仍需带上"struct" */ }LinkNode; // 创建新的节点实例只需要直接用我们刚刚设置的新名称即可. LinkNode head, tail; LinkNode *current_node_ptr; ``` 另外,在很多场景下为了简化内部成员对于同类型的指向还会结合匿名方式一起使用: ```c // 结合 typedef + 匿名 struct 来定义链表节点 typedef struct _linknode{ int val; struct _linknode *next; } ListNode ; ``` 这里需要注意的是:尽管我们在定义过程中已经将整个结构体命名为 `_linknode`(或其他任何你喜欢的名字),但由于后续可以直接利用 `ListNode` 访问而不必再提及其底层具体的 `struct _linknode` 形式,所以实际编程中一般不会再去关心原始标识符了。 总结来说,两者的主要差异在于是否提供了一个更为方便使用的别名。而这种命名机制不仅限于结构体,也适用于其他复合类型如联合体(`union`)或枚举类型(`enum`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值