我有一个程序如下:
这里我有一个名为test()
的函数,它接受指针tree1的地址,我试图在*tree1
执行后更新指针test()
的地址。我希望*tree
中的test(sample *tree)
引用tree1
地址,如果我更新tree1
,它也会更新tree
。哎呀!我知道我弄错了。因此,该计划的目标是在*tree1
完成后,使用*tree
中的地址更新test()
的地址。有没有办法实现这个目标?
#include <stdio.h>
#include <stdlib.h>
typedef struct abc {
int num;
} sample;
sample *test(sample *tree){
sample *text,*text1;
text=(sample *)malloc(sizeof(sample));
text->num=4;
text1=(sample *)malloc(sizeof(sample));
text1->num=6;
tree=text1;
printf("address of tree in test() is %p\n",tree);
return text;
}
int main()
{
sample *tree1;
tree1=(sample *)malloc(sizeof(sample));
tree1->num=5;
printf("address of tree1 before test() is %p\n",tree1);
test(tree1);
printf("address of tree1 after test() is %p\n",tree1);
return(0);
}
答案 0 :(得分:1)
指针在传递给函数时被复制,因此更改新指针地址不会影响原始指针。
typedef struct abc {
int num;
} sample;
sample *test(sample **tree){
*text=(sample *)malloc(sizeof(sample));
return *text;
}
答案 1 :(得分:1)
您只需要进行一系列小改动,也许还需要添加一些null ptr测试。因为在C
中所有param传递都是按值进行的,所以你必须传递test()
tree1
的地址,以便该函数可以在其中传递一些新值地址。像,
sample* test(sample **ptr_to_tree) { // change defn
然后,将此指针值更新为
(*ptr_to_tree) = text1; // was tree=text1 changing what is basically "returned"
最后,当调用test()时,你需要传递树的地址
test(&tree); // changing how to use it
答案 2 :(得分:0)
你需要使用双指针。这对你来说是一个很好的教程,需要双指针。