更改我在C中的函数内传递的指针
我有这段代码,它将(希望)成为一个单链表实现更改我在C中的函数内传递的指针,c,function,pointers,C,Function,Pointers,我有这段代码,它将(希望)成为一个单链表实现 #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
#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;
}
}
它很好用。我的问题是,;为什么我必须创建临时文件?据我所知,在代码的第一个版本中,我传递了一个指向root的指针,这样就不会出现“按引用传递”的问题,而且在运行时也不会出现问题。。。怎么了
(*root)->d = n;
(*root)->next = NULL;
这是一个运算符优先级问题。使用()
将修复它
这是一个运算符优先级问题。使用()
将修复它。运算符优先级
*root->d = n;
被解析为
*(root->d) = n;
但是你想要
(*root)->d = n;
运算符优先级
*root->d = n;
被解析为
*(root->d) = n;
但是你想要
(*root)->d = n;
请参阅。->
运算符的优先级高于*
(取消引用)运算符,这是导致错误的原因
*由于运算符的优先级,root->d被解释为*(root->d)而不是(*root)->d。请参阅。->
运算符的优先级高于*
(取消引用)运算符,这是导致错误的原因
*root->d = n;
*由于运算符的优先级,root->d被解释为*(root->d)而不是(*root)->d。谢谢,这就是问题所在!谢谢你,就是这样!
*root->d = n;