初始化指针的内容是什么?
what is the content of an initialised pointer?
我正在学习 C,特别是结构。以下递归(是吗?)结构的示例用于创建链表。这全部来自 beejs guide to c.
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
int main(void)
{
struct node *head;
//Hackishly set up a linked list (11)->(22)->(33)
head = malloc(sizeof(struct node)); //line 14
head->data = 11;
head->next = malloc(sizeof(struct node)); //line 16
head->next->data = 22;
head->next->next = malloc(sizeof(struct node));
head->next->next->data = 33;
head->next->next->next = NULL;
// Traverse it
for (struct node *cur = head; cur != NULL; cur = cur->next) {
printf("%d\n", cur->data);
}
}
在第 14 行,因为 Head 是一个指针,它从 malloc 中保存内存地址。
在第 16 行,next 是指针,而不是使用 head.next 来存储内存地址
它使用 head->next
。这让我感到困惑,因为 head->next == (*head).next
这意味着 next 的内容被分配了内存地址,但 next 没有指向任何东西。
第 2 部分:
我想为链接列表创建一个函数,希望在未来使用它来添加或删除其中的内容。我的问题是它根本没有被调用。
我相信因为我只是打印链表的内容,所以 malloc 地址离开范围应该没有问题。
忽略 line_number(23)。
非常感谢!
第 0 部分
The following exaple of a recursive (is it?) [...]
(不,不是。)
第 1 部分
head = malloc(sizeof(struct node));
head->data = 11;
head->next = malloc(sizeof(struct node));
on line 14 since Head is a pointer it saves the memory address from pointer. on line 16 next is the pointer but rather then using head.next to store the memory address it uses head->next. This confuses me as head -> next == (*head).next this means the content of next is assigned the memory address but next is not pointing to anything.
head->next
等同于(*head).next
。假设所有的malloc
调用都成功了,head->next
在赋值前没有指向任何有效的东西,而是在赋值后指向malloc
分配的块。对于成员head->next
(相当于(*head).next
)的访问,重要的是head
中的指针值是有效的。 head->next
中可能无效的初始指针值无关紧要,因为无论如何它都会被赋值替换。
第 2 部分
int main(void)
{
void linked_list_function ();
return 0;
}
i wanted to create a function for linked list with the hopes of using it in the futhur to add or remove stuff from it. My problem is that it simply does not get called.
linked_list_function
不会被调用,因为没有任何东西在调用它。 void linked_list_function();
是函数声明,不是函数调用。这是 main
的一个版本,它调用 linked_list_function
:
int main(void)
{
linked_list_function ();
return 0;
}
我正在学习 C,特别是结构。以下递归(是吗?)结构的示例用于创建链表。这全部来自 beejs guide to c.
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
int main(void)
{
struct node *head;
//Hackishly set up a linked list (11)->(22)->(33)
head = malloc(sizeof(struct node)); //line 14
head->data = 11;
head->next = malloc(sizeof(struct node)); //line 16
head->next->data = 22;
head->next->next = malloc(sizeof(struct node));
head->next->next->data = 33;
head->next->next->next = NULL;
// Traverse it
for (struct node *cur = head; cur != NULL; cur = cur->next) {
printf("%d\n", cur->data);
}
}
在第 14 行,因为 Head 是一个指针,它从 malloc 中保存内存地址。
在第 16 行,next 是指针,而不是使用 head.next 来存储内存地址
它使用 head->next
。这让我感到困惑,因为 head->next == (*head).next
这意味着 next 的内容被分配了内存地址,但 next 没有指向任何东西。
第 2 部分: 我想为链接列表创建一个函数,希望在未来使用它来添加或删除其中的内容。我的问题是它根本没有被调用。
我相信因为我只是打印链表的内容,所以 malloc 地址离开范围应该没有问题。 忽略 line_number(23)。 非常感谢!
第 0 部分
The following exaple of a recursive (is it?) [...]
(不,不是。)
第 1 部分
head = malloc(sizeof(struct node));
head->data = 11;
head->next = malloc(sizeof(struct node));
on line 14 since Head is a pointer it saves the memory address from pointer. on line 16 next is the pointer but rather then using head.next to store the memory address it uses head->next. This confuses me as head -> next == (*head).next this means the content of next is assigned the memory address but next is not pointing to anything.
head->next
等同于(*head).next
。假设所有的malloc
调用都成功了,head->next
在赋值前没有指向任何有效的东西,而是在赋值后指向malloc
分配的块。对于成员head->next
(相当于(*head).next
)的访问,重要的是head
中的指针值是有效的。 head->next
中可能无效的初始指针值无关紧要,因为无论如何它都会被赋值替换。
第 2 部分
int main(void)
{
void linked_list_function ();
return 0;
}
i wanted to create a function for linked list with the hopes of using it in the futhur to add or remove stuff from it. My problem is that it simply does not get called.
linked_list_function
不会被调用,因为没有任何东西在调用它。 void linked_list_function();
是函数声明,不是函数调用。这是 main
的一个版本,它调用 linked_list_function
:
int main(void)
{
linked_list_function ();
return 0;
}