gpt4 book ai didi

c - 当我将它作为指向通过 C 中另一个函数的函数的指针的引用传递时,兼容的指针类型是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:08 25 4
gpt4 key购买 nike

我知道为了让调用者的内存反射(reflect)被调用者局部参数的变化,需要将参数作为指针的引用传递。当我使用 Push(1, &h1);推(3,&h1); Push(5, &h1); 直接创建并打印正确的列表。但是如果我通过 createList(&h1); 调用 Push(..., &h1),编译器给出警告:不兼容的指针类型将“struct ListNode ***”传递给“struct ListNode **”类型的参数;删除 & [-Wincompatible-pointer-types],并且不会创建任何列表。在我按照编译器所说的操作后 - 删除 &,我仍然没有得到列表。

我的问题:当我将它作为指向通过 C 中另一个函数的函数的指针的引用传递时,兼容的指针类型是什么?

void Push(int val, struct ListNode **headRef){
struct ListNode *newNode = malloc(sizeof(struct ListNode));

newNode->val = val;
newNode->next = *headRef;
*headRef = newNode;
}

void createList(struct ListNode **head){
int num;

printf("Enter data to create a list. (Enter -1 to end)\n");
scanf("%d", &num);

while (num != -1){
Push(num, &head); // Note: the '&'
scanf("%d", &num);
}
}

int main(){
createList(&h1);
printList(h1);
}

void printList(struct ListNode *head){
struct ListNode *curr= head;

while (curr != NULL) {
printf("%d ", curr->val);
curr = curr->next;
}
}

最佳答案

当你在createList中调用Push时,你需要传递head,而不是&head

Push 需要一个 ListNode **createList 中的head 变量也是ListNode ** 类型,所以调用Push 时不需要获取它的地址或解引用它

createList时,head包含h1的地址。如果您将相同的值传递给 Push,那么在该函数中 headRef 也包含 h1 的地址。

我用 Push(num, head); 运行了你的代码,它似乎输出了你所期望的。

关于c - 当我将它作为指向通过 C 中另一个函数的函数的指针的引用传递时,兼容的指针类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32701862/

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