这是我的代码,我不明白这些指针的方式和&在这里工作。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct node {
int x;
struct node * left;
struct node * right;
} node;
void add_Element(node **,int);
node * getNewNode();
void main(){
node * root = NULL;
add_Element(&root,4687);
inorder_tra_recursive(root);
if(root == NULL) printf("still Nulll\n");
else printf("not null , working\n");
}
node * getNewNode(){
node * newNode = (node*)malloc(sizeof(node));
newNode->left = NULL;
newNode->right = NULL;
newNode->x = 0;
return newNode;
}
void add_Element(node ** root,int data){
*root = getNewNode();
(*root)->x = data;
// I did not write all function !! this is just a prototype and this is working
}
void inorder_tra_recursive(node * root){// looking for elements to print !
if(root==NULL)
return ;
inorder_tra_recursive(root->left);
printf("----%d----\n", root->x);
inorder_tra_recursive(root->right);
}
这是我的代码,这是我将add_Element功能更改为此时无法理解的事情。
void add_Element(node * root,int data){
if(root==NULL){
root = getNewNode();
root->x = data;
}else{
if(root->x <= data)
add_Element(root->right,data);
else
add_Element(root->left,data);
}
}
它不会向树中添加元素。但如果我这样做的话
node * add_Element(node * root,int data){
if(root==NULL){
root = getNewNode();
root->x = data;
return root;
}else{
if(root->x <= data)
root->right = add_Element(root->right,data);
else
root->right = add_Element(root->left,data);
}
return root;
}
它有效,但是为什么我必须返回root来获得结果的区别是什么。
void main(){
node * root = NULL;
root = add_Element(root,48464);//random number
}
我可以像最后一个一样使用它,但我必须了解造成这种差异的原因。 (差异:&amp; root to node ** root //不必返回root,有效! root to node * root //必须返回root,否则无法正常工作) 直到今天,我认为这两种方式是相同的,但显然它不是。所以,请帮助我,我在这里疯狂:D。 Anyhelp将不胜感激,谢谢
答案 0 :(得分:0)
void add_Element(node ** root,int data){
if(*root==NULL){
*root = getNewNode();
(*root)->x = data;
}else{
if((*root)->x <= data)
add_Element(&(*root)->right,data);
else
add_Element(&(*root)->left,data);
}
}
在第一个示例中,您通过引用传递指针变量(将&root
传递给node ** root
参数)。在第二个,你不是(只传递指针值root
,所以指针变量root
本身不能更改),所以新的节点对象丢失 - 除非你返回它,就像你结束必须这样做。
答案 1 :(得分:0)
void main(){
int Arr[50];
random(Arr,50);
printf("%d", Arr[25]);
}
void random(int * Arr,int size){
int i;
for(i=0;i<size;i++)
Arr[i] = i+1;
} **所以这里我通过引用传递一个指针但是当它指向我通过的指针时,我必须使用&#34;&amp;&#34;通过引用传递它。 我相信我的exp是正确的,如果它还没有,那么我仍然缺少一部分**