C++-Typedef结构体遇上指针

本文详细解析了C语言中typedef结合结构体指针的使用方式,通过具体的链表节点定义示例,解释了如何定义结构体类型及指向结构体的指针,并阐述了这种定义方式的独特性和限制条件。

  继Typedef遇上结构体数组后,我们又产生了新的疑问。

  上一期地址:https://www.cnblogs.com/lemaden/p/10122929.html  

  昨天一位朋友又问我了,说结构体数组遇上typedef我懂了,就是数组拥有三个特性:1.首地址 2.数组的长度 3. 数组的步长(元素类型),typedef只是重定义了数组的长度和类型。

  那么今天的typedef跟结构体指针你怎么解释呢?我们看下问题的代码:

typedef struct LNode
{                                                      // Singly linked list Node
     int    data; 
     struct LNode   *next;                   // Pointer to next node
}LNode,*LinkList;            

  在链表中定义节点时,经常会看到上面的第四行,strcut LNode *next,这里仿佛是在边定义节点类型,又在里面定义指针域,其实这样是可以的,记住:在C语言中,只有这里可以这样用,其他地方都不可以,而且只能是指针,不能是结构体变量,否则会陷入无限递归。

  第三行就不用解释了,一个数据域。那么三四行我们都解决了。继续往下走。

  第五行右括号 { 第一个类型LNode比较好解释。

  是为struct LNode 创建一个简单的别名,以后就用LNode代替它了。

  那么*LinkList呢?

  我们把它单纯拿出来:

typedef struct LNode
{                                                      // Singly linked list Node
     int    data; 
     struct LNode   *next;                   // Pointer to next node
}*LinkList;  

  一句话解释清楚:把* 与前面的struct LNode放在一起,是不是就清楚了?

typedef struct LNode {....}*     LinkList 

  我们可以拿基本类型来示范下:

typedef int* Pointer;
Pointer p;    //指向整型类型的指针P

  那么回到上面的例子,LinkList 是不是就是指向结构体类型的指针了。

  这里的LinkList应该就是头指针了,指向整个链表,而前面的LNode应该就是节点。

  

  

转载于:https://www.cnblogs.com/lemaden/p/10169118.html

`typedef`关键字在C++中用于创建新的标识符名,以替代现有的数据类型名,使得类型名更加简洁、易于理解。对于结构体来说,通过使用`typedef`可以为已有的结构体类型创建一个新的别名。 ### 示例: 假设有一个名为 `Person` 的结构体: ```cpp struct Person { std::string name; int age; }; ``` 如果我们要经常使用这个结构体,并希望给它起一个更友好、简短的名字,我们可以使用 `typedef` 创建一个别名: ```cpp typedef struct Person PersonStruct; // 现在这个别名可以用来定义变量或者作为函数返回值等。 PersonStruct personInfo = {"Alice", 30}; ``` ### 使用场景: 1. **简化代码**:当某个复杂的数据类型名称较长,频繁出现在代码中时,使用 `typedef` 可以帮助减少代码冗余,提高代码的可读性和维护性。 2. **增强可读性**:通过给常见的数据结构或类型提供简单而有意义的名字,开发者可以在代码中直接使用这个名字而不是完整的类型描述,增强了代码的可读性。 ### 注意事项: 虽然 `typedef` 可以让代码看起来更整洁,但在某些情况下也可能引入混淆: -结构体名字很长或者包含特殊字符时,使用 `typedef` 创立的别名可能导致命名冲突或者难以记忆。 - 过度使用 `typedef` 可能会掩盖原有类型的本质特征,特别是在类型已经足够清晰的情况下,这样做可能会降低代码的透明度。 ### 相关问题: 1. **如何在C++中声明和使用自定义数据类型?** 2. **解释C++中的引用指针的区别。** 3. **为什么在大型项目中,通常推荐避免过度使用 `typedef`?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值