gpt4 book ai didi

更改我在 C 函数中传递的指针

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:02 26 4
gpt4 key购买 nike

我有这段代码(希望)将成为一个单链表实现。

#include <stdio.h>
#include <stdlib.h>

struct NODE{
int d;
struct NODE *next;
};

int addNode(int n, struct NODE **root);

int main(){

struct NODE *root = NULL;
addNode(3, &root);

printf("%i\n", root->d);

getch();
return 0;
}

int addNode(int n, struct NODE **root){


if(*root == NULL){
*root = malloc(sizeof(struct NODE));
*root->d = n;
*root->next = NULL;
return 0;
}
}

当我运行它时,我在 addNode 函数中得到“在非结构或 union 的东西中请求成员‘d’”;与“下一个”部分相同。相反,如果我将函数更改为:

int addNode(int n, struct NODE **root){

struct NODE *temp;

if(*root == NULL){
*root = malloc(sizeof(struct NODE));
temp = *root;
temp->d = n;
temp->next = NULL;
return 0;
}
}

它工作得很好。我的问题是;为什么我必须创建临时工?据我了解,在代码的第一个版本中,我传递了一个指向根目录的指针,因此不应该存在“按引用传递”问题,并且运行时也不应该有问题...有什么错误吗?

最佳答案

(*root)->d = n;
(*root)->next = NULL;

这是一个运算符优先级问题。使用 () 将修复它。

关于更改我在 C 函数中传递的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14949957/

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