有人可以解释下面的代码。我是C的新手并试图弄明白。为什么我们最后有queueNodeT?
highlight.js
答案 0 :(得分:0)
让我们逐个分解。
此行只是告诉您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编译器。有一个可用的人可能会验证没有错误吗?
答案 1 :(得分:0)
queueNodeT是typedef语句尝试创建的类型的名称。
另一种指定方法是:
struct queueNodeTag {
...
};
typedef struct queueNodeTag queueNodeT;
在C(对比C ++)中," struct 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"。我更喜欢使用后缀[和"蛇案例"符号而不是骆驼驼峰"你的例子中的符号]。