gpt4 book ai didi

c - C语言中带有指针的typedef

转载 作者:行者123 更新时间:2023-12-01 12:28:06 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Is it a good idea to typedef pointers?

(15 个回答)



Confusion with typedef and pointers in C [duplicate]

(2 个回答)


6年前关闭。




我是 C 编程的初学者,我正在研究链接列表。
我正在尝试创建一个链接列表,它将以正确的顺序显示字母。该程序使用户能够按字母顺序在列表中插入一个字符或从列表中删除一个字符。
所以,我举了一个例子,但有些东西我无法理解。

这是代码的第一部分:

#include <stdio.h>
#include <stdlib.h>

struct listNode {
char data;
struct listNode *nextPtr;
};

typedef struct listNode ListNode;
typedef ListNode *ListNodePtr;

在那部分之后,程序从函数原型(prototype)开始。
我知道 typedef 的用法在底部的第二行。
但我不知道的是,代码的最后一行包含:
typedef ListNode *ListNodePtr;

这意味着什么?

最佳答案

简洁版本:

typedef ListNode *ListNodePtr;

定义 ListeNodePtr作为指向 ListNode 的指针。

您可能想知道为什么星号“粘”在 ListNodePtr 上。这里。这是因为在 C 声明中,指针被视为类型修饰符,因此在声明中,它是声明符的一部分(变量的标识符或 typedef 'd 类型)。(*)在一行中有多个声明,例如以下:
int *a, b;

将定义一个指向 int a 的指针和一个普通的 int b .

你可以把它写成
int* a, b;

但这会很困惑,因为 b仍会 不是 做一个指针。

话虽如此,我个人认为 typedef 的风格不好一个指针,因为作为 C 程序员,您 了解星号的含义。把它藏在 typedef 后面(就像这里所做的那样,用一些非标准的后缀代替它,比如“Ptr”)只会让其他人更难阅读代码。

(*) 在此处添加脚注:此设计背后的原因是声明应该与用法相同。 *a取消引用一个指针,所以 *a还应该声明一个指针。

关于c - C语言中带有指针的typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33188589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com