我正在学习链接列表以及如何使用结构和指针在C中创建它们。我下面有一个例子。根据我的理解,被调用的push()传递了头节点所在结构的开始内存位置作为参数。我们的push()函数的参数将一个结构节点作为指针的指针,所以它作为引用传递,而不是实际的副本。所以我们的struct node ** headref的第一个指针只是一个指向我们头节点的内存位置的指针,而第二个指针指向的值是头节点指向的下一个内存位置。我们在struct节点内创建一个名为newnode的新节点,并为其分配一些内存。然后我们在这个节点里创建一个int类型的数据。结构和指针指针
好吧,假设我说的一切都是正确的,下一部分就是我所困惑的。
newNode->next= *headRef;
从我能理解的这行中提取headref,这样只会让headref指向头节点。然后我们有一个指针操作,headref指向的内容也就是我们下一个指针所指向的内容。基于此,我们新节点(newnode)中的下一个指针将指向头指针。
下一行对此我也搞不清楚上:
*headRef = newNode;
什么解除引用的headref指针指向,这是头节点,将现在指向我们的newnode。
基于此,应该有一个新的节点叫做newnode,它具有一个int数据和一个将我们的newnode链接到头部的下一个指针。那么headref指针(或者它是头节点?)将指向新节点。我知道这是不正确的,因为我们的newnode旁边的指针应该指向第二个节点,所以我们的newnode可以在结构中链接。我也不相信我在上述两行代码中理解指向指针的指针和取消引用。
代码:
void Push(struct node** headRef, int data) {
struct node* newNode = malloc(sizeof(struct node));
newNode->data = data;
newNode->next = *headRef;
*headRef = newNode;
}
void PushTest(void) {
struct node* head = BuildTwoThree(); // suppose this returns the list {2, 3}
Push(&head, 1);
Push(&head, 13);
// head is now the list {13, 1, 2, 3}
}
究竟是什么问题? – aaaaaa123456789 2013-03-01 09:15:36
我很确定我可以阅读 - 如果不能开始阅读就很难写。这个问题得到解答,我问的是你对这些问题的疑问是 - 它只是一个“这是如何工作的?”事情,还是“它为什么不做X?”事情? – aaaaaa123456789 2013-03-01 09:19:42
我的假设哪部分是错误的?我显然没有正确地阅读这两行,因为我在想的不是将头节点链接到newnode,而是将newnode的下一个指针链接到第二个节点(之前在创建要插入的newnode之前创建的)。对不起,粗鲁,只是恼火,我不明白这一点。 – user2122810 2013-03-01 09:22:14