问题描述
让我们看一下这段代码:
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
不是副本,它是指向实际结构的指针,那么为什么我需要使用指向结构的指针?
解决方法
因为您要修改指针本身,而不是引用的值。要对其进行修改,您需要将指针传递给该指针
类似于“普通”类型。如果传递整数,则无法在函数中对其进行修改。要存档,您需要传递指针。