gpt4 book ai didi

c - 将 &var 传递给 *var 和将 var 传递给 var 有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 03:40:52 28 4
gpt4 key购买 nike

基本上,我想知道为什么会这样(将列表的内存地址作为参数传递):

void init_lista (elemPtr *list) {
*list = NULL;
}
int main(){
elemPtr list;
init_list(&list);
//[...]
}

与此不同(仅传递列表的内容):

void init_lista (elemPtr list) {
list = NULL;
}
int main(){
elemPtr list;
init_list(list);
//[...]
}

OBS: elemPtr 是结构体的指针类型(typedef struct elem *elemPtr)。

我从&*的理解是,第一个会得到var的内存地址,而后者会得到它引用的值。通过这个概念,两个代码部分应该是等效的,但第一个运行良好,而第二个编译但给我一个运行时错误。这是为什么?

最佳答案

在这个函数中

void init_lista (elemPtr list) {
list = NULL;
}

list 是函数的局部变量。你可以想象成这样

void init_lista () {
elemPtr list = NULL;
}

即退出函数后变量将被销毁。原始参数不会改变,因为它是按值传递给函数的。因此该函数处理原始对象的副本。

在这个函数中

void init_lista (elemPtr *list) {
*list = NULL;
}

传递了指向原始对象的指针。因此,通过该指针更改参数将针对原始对象完成。

关于c - 将 &var 传递给 *var 和将 var 传递给 var 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28798322/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com