为什么指向结构的指针在函数中不可重写?
Why is a pointer to a structure not overridable in a function?
让我们看一下这段代码:
typedef struct nodes{
int val;
struct nodes next;
} node;
insertHead(node *list, int val) {
node *temp = malloc(sizeof(node));
temp->val;
temp->next = list;
list = temp;
}
int main() {
node *list = NULL;
insert(list, 5);
}
在这里,如果我尝试调用 list->val
它不起作用,就好像它传递了列表的副本并且实际上并没有设置列表的新头。
typedef struct nodes{
int val;
struct nodes next;
} node;
insertHead(node **list, int val) {
node *temp = malloc(sizeof(node));
temp->val;
temp->next = *list;
*list = temp;
}
int main() {
node *list = NULL;
insert(&list, 5);
}
我知道这会起作用,但我的实际问题是为什么第一个示例不起作用。我的意思是我将 list
传入函数,而 list
是指向结构的指针。我是 C 的新手,但传入结构地址以更改其成员并可能覆盖它是否正确。我完全理解,如果我使用 *list
传入结构本身,这是行不通的,因为它只会创建一个副本。
但是 node *list
不是副本,它是指向实际结构的指针,那么为什么我需要使用指向结构的指针来执行此操作?
P.S:我是 C 的新手,所以不要太苛刻地判断。顺便说一句,这将是一个链表。
因为你要修改的是指针本身,而不是引用的值。要修改它,你需要将指针传递给这个指针
类似于“普通”类型。如果传递整数,则不能在函数中修改它。要存档,您需要传递指针。
让我们看一下这段代码:
typedef struct nodes{
int val;
struct nodes next;
} node;
insertHead(node *list, int val) {
node *temp = malloc(sizeof(node));
temp->val;
temp->next = list;
list = temp;
}
int main() {
node *list = NULL;
insert(list, 5);
}
在这里,如果我尝试调用 list->val
它不起作用,就好像它传递了列表的副本并且实际上并没有设置列表的新头。
typedef struct nodes{
int val;
struct nodes next;
} node;
insertHead(node **list, int val) {
node *temp = malloc(sizeof(node));
temp->val;
temp->next = *list;
*list = temp;
}
int main() {
node *list = NULL;
insert(&list, 5);
}
我知道这会起作用,但我的实际问题是为什么第一个示例不起作用。我的意思是我将 list
传入函数,而 list
是指向结构的指针。我是 C 的新手,但传入结构地址以更改其成员并可能覆盖它是否正确。我完全理解,如果我使用 *list
传入结构本身,这是行不通的,因为它只会创建一个副本。
但是 node *list
不是副本,它是指向实际结构的指针,那么为什么我需要使用指向结构的指针来执行此操作?
P.S:我是 C 的新手,所以不要太苛刻地判断。顺便说一句,这将是一个链表。
因为你要修改的是指针本身,而不是引用的值。要修改它,你需要将指针传递给这个指针
类似于“普通”类型。如果传递整数,则不能在函数中修改它。要存档,您需要传递指针。