为什么typedef struct 后面要加上名字才能够->next->next
为什么typedef struct 后面要加上名字才能够->next->next
为什么typedef struct 后面要加上名字才能够->next->next
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在C语言中,
typedef
是一个预处理器指令,它为已经存在的类型创建了一个新的名字。当你使用typedef struct
时,你实际上是在定义一个新的结构体类型,并给这个类型一个别名。例如,在这个问题中的代码片段:
typedef struct { int val; struct MyLinkedList* next; } MyLinkedList;
这行代码做了两件事:
- 定义了一个名为
struct MyLinkedList
的新结构体类型,它有一个整型成员变量val
和一个指向自身类型的指针next
。 - 使用
typedef
创建了一个新类型名MyLinkedList
,它是上面定义的结构体的别名。
这样做的好处是,后续你在代码中可以使用
MyLinkedList
来代替struct MyLinkedList
,使得代码更易读。如果你不给结构体起别名(即不加名字),那么你需要始终使用原始的struct MyLinkedList
来引用这个结构体类型,这会显得冗长且不易阅读。因此,当你在其他地方想要访问
MyLinkedList
结构体实例的next
成员时,你需要使用它的全称或别名。比如:MyLinkedList* cur = obj; while (cur != NULL) { printf("Value: %d\n", cur->val); cur = cur->next; }
在这个例子中,
cur->next
中的->
操作符用于访问MyLinkedList
结构体实例cur
的next
成员。由于我们已经为结构体起了别名MyLinkedList
,所以我们可以直接使用这个别名来访问结构体的成员。如果你没有给结构体起别名,例如像下面这样:
struct MyLinkedList { int val; struct MyLinkedList* next; }; void myLinkedListDeleteAtIndex(struct MyLinkedList* obj, int index) { // ... }
在这种情况下,你必须在整个程序中使用
struct MyLinkedList
来引用这个结构体,而不是简化的名称。这就意味着在myLinkedListDeleteAtIndex
函数中,你需要这样做:void myLinkedListDeleteAtIndex(struct MyLinkedList* obj, int index) { struct MyLinkedList* cur = obj; while (cur != NULL) { if (i == index) { struct MyLinkedList* temp = cur->next; cur->next = temp->next; } cur = cur->next; } }
总之,为了简化代码并提高可读性,通常推荐使用
typedef
为结构体定义一个别名。这样在后续代码中就可以使用别名来代替完整的结构体名称,就像使用任何其他类型一样方便地进行成员访问。解决 1无用- 定义了一个名为
悬赏问题
- ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
- ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
- ¥15 openpcdet自制数据集评估bev精度和3d精度相同
- ¥15 excel 上下按钮 显示行
- ¥20 云卓h12pro 数传问题
- ¥20 请问有人知道怎么用工艺库里面的sdb文件通过virtuoso导出来library里面每个cell的symbol吗?
- ¥20 海思 nnie 编译 报错
- ¥50 决策面并仿真,要求有仿真结果图
- ¥15 关于路由器的路由协议配置
- ¥15 springboot接入微信支付SDK