如何解决为什么在函数中不能覆盖结构的指针?
让我们看一下这段代码:
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的新手,所以不要太刻薄。这将是一个链接列表。
解决方法
因为您要修改指针本身,而不是引用的值。要对其进行修改,您需要将指针传递给该指针
类似于“普通”类型。如果传递整数,则无法在函数中对其进行修改。要存档,您需要传递指针。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。