【发布时间】:2018-03-23 16:48:23
【问题描述】:
我是一名专业的 C# 程序员,但正在尝试重新学习 C。我一直在用 C 编写一个简单的链表。当在 main() 中定义头节点时,我已经让它工作正常。但现在我想尝试在函数“initializeHead()”中初始化头节点。
这里是 Node 定义和 Main() 函数:
struct node
{
char value;
struct node * next;
};
int main()
{
struct node * head = NULL;
initializeHead(head, 'a');
return 0;
}
初始化头节点的函数:
void initializeHead(struct node * head, char vertexCategory)
{
if (head == NULL)
{
head = malloc(sizeof(struct node));
head->value = vertexCategory;
head->next = NULL;
}
else
{
printf("\nError: Head already initialized!");
}
}
...调用initializeHead()后,好像什么都没发生,因为head还是NULL。
如何做到这一点?
【问题讨论】:
-
你必须传递
head的地址,(例如struct node **head)和initializeHead(&head, 'a'); -
为什么要 initializeHead 是一个 void 函数?将其结果作为返回值返回似乎更合乎逻辑。
-
@Nick Lordi “我是一名专业的 C# 程序员” - 我无法用言语表达我的惊讶。:)
-
有没有人注意到 C 中没有方法?
-
void f(int i) {i = 6;}- 当我运行int i = 5; f(i);时我还是 5?
标签: c linked-list singly-linked-list