有人可以请解释下面的代码。我是C新手,并试图找出答案。为什么我们最后有queueNodeT?C语言和队列/链表
typedef char queueElementT;
typedef struct queueNodeTag {
queueElementT element;
struct queueNodeTag *next;
} queueNodeT;
有人可以请解释下面的代码。我是C新手,并试图找出答案。为什么我们最后有queueNodeT?C语言和队列/链表
typedef char queueElementT;
typedef struct queueNodeTag {
queueElementT element;
struct queueNodeTag *next;
} queueNodeT;
queueNodeT是typedef语句尝试创建的类型的名称。
指定此的另一种方法是:
struct queueNodeTag {
...
};
typedef struct queueNodeTag queueNodeT;
在C(相对于C++), “结构queueNodeTag” 刚刚定义了一个名为 “queueNodeTag” 结构。在C++ [你到达那里],这也将定义一个名为“queueNodeTag”型
当创建一个指针变量的结构,这是略短的使用方法:
queueNodeT *my_pointer;
比:
struct queueNodeTag *my_pointer;
结尾的“T”只是一个编码约定,表示它是一个类型名称而不是变量。你可以使用他人。我的是:
struct mystructname {
...
};
typedef struct mystructname mystructname_t;
typedef mystructname_t *mystructname_p;
使用mystructname_p,您可以更改:
struct mystructname *my_pointer;
mystructname_t *my_pointer;
到:
mystructname_p my_pointer;
的 “_t” 是相当普遍的。 “_p”是我的约定,但是,我相信其他约定会将类型的指针定义为“p < Mytype>”,例如“pMystructName”。我更喜欢在这个例子中使用后缀[和“蛇案”符号,而不是你的例子中的“骆驼驼峰”符号]。
让我们逐个分解。
此行只是告诉你queueElementT
在这里定义为char
。意思是你可以写queueElementT
或char
,两者都可以。
typedef char queueElementT;
现在这里是实际的struct
。它包含两个变量,即它所持有的元素,在本例中为char
。然后它还会告知queue
中的下一个元素。
typedef struct queueNodeTag {
queueElementT element;
struct queueNodeTag *next;
} queueNodeT;
更多可读于this解答。
演示:
int count (queueNodeTag q) {
int i = 0;
if (q == null) {
return 0;
}
if (q.next == null) {
return 1;
}
while (q.next != null) {
q = q.next;
i++;
}
return i;
}
三起案件来处理。
q
是null
,该queue
是空的。返回0.q.next
是null
,queue
只包含一个元素。返回1.q.next
与null
分开,增量为i
,因为我们走了。我更好的名字可能是elements
或类似的东西。此代码未经测试,因为我目前没有C编译器。有人提供一个可能可以验证没有犯下错误?
谢谢!我正在尝试代码 –
这就是'typedef'。它为struct结合了一个'struct'声明和一个typedef名字。 –
'typedef'声明为一个类型声明一个别名。在这种情况下'queueElementT'被声明为'char'的别名。此外,'queueNodeT'被声明为'struct queueNodeTag'的别名,'struct queueNodeTag'被进一步定义为具有指定成员的'struct'。 –