为什么需要*(在insertAtfirst前面)?我知道我们用它来创建指针和解引用,但我无法理解这里的逻辑。
struct Node *insertAtFirst(struct Node *head, int data)
{
struct Node *ptr = (struct Node *)malloc(sizeof(struct Node));
ptr->next = head;
ptr->data = data;
return ptr;
};
尽管这段特殊的代码可以在c++中编译,但它显然只适合于C编程。
星号是返回类型的一部分,而不是函数名。
struct Node *
读作指向Node
的指针struct Node * f(...)
读取为"f
是一个返回指向Node
"> 的指针的函数。
也许使用typedef
会使它更清晰?
typedef struct Node * NodePtr; // NodePtr becomes an alias to "struct Node *"
struct Node {
NodePtr next;
int data;
};
NodePtr insertAtFirst(NodePtr head, int data)
{
NodePtr ptr = (NodePtr)malloc(sizeof(struct Node));
ptr->next = head;
ptr->data = data;
return ptr;
}
我只能建议你熟悉typedef
,这是一个伟大的方式,使C/c++代码更具可读性和安全性,特别是当处理这些讨厌的数组和指针。
在c++中使用这样的代码在技术上是可能的,但这将是一个糟糕的想法。c++提供了更安全的方式来处理链表。
唉,C没有。所以,如果你真的在学习C语言,就像你的例子所暗示的那样,你别无选择,只能学习如何处理指针。祝你好运:)
*是insertAtFirst函数返回类型的一部分。它告诉编译器该函数的结果应该是什么。它与函数名本身无关。因此,代码告诉编译器insertAtFirst将返回指向Node (Node*)的指针。在函数内部,ptr被声明为Node*。最后函数返回ptr。
因为函数返回一个struct Node
指针(struct Node*
)。
指针符号的位置有时令人困惑,因此我建议将其直接放在类型名称之后。例:char*