Function C通过参数返回答案(参考)
为什么大家, 请考虑这个小代码,帮助我弄明白为什么它不起作用?< /P>Function C通过参数返回答案(参考),function,pointers,parameters,reference,ansi,Function,Pointers,Parameters,Reference,Ansi,为什么大家, 请考虑这个小代码,帮助我弄明白为什么它不起作用?< /P> #include <stdio.h> #include <stdlib.h> void setup(int* helo) { helo = (int*) malloc(sizeof(int)); (*helo) = 8; } int main(int argc, char* argv[]) { int* helo = NULL; setup(helo);
#include <stdio.h>
#include <stdlib.h>
void setup(int* helo) {
helo = (int*) malloc(sizeof(int));
(*helo) = 8;
}
int main(int argc, char* argv[]) {
int* helo = NULL;
setup(helo);
printf("Value: %s \n", (*helo));
getchar();
return 0;
}
#包括
#包括
无效设置(int*helo){
helo=(int*)malloc(sizeof(int));
(*helo)=8;
}
int main(int argc,char*argv[]){
int*helo=NULL;
设置(helo);
printf(“值:%s\n”,(*helo));
getchar();
返回0;
}
您可以尝试printf(“值:%d\n”,(*helo))代码>而不是printf(“值:%s\n”,(*helo))代码>?您可以尝试printf(“值:%d\n”,(*helo))代码>而不是printf(“值:%s\n”,(*helo))代码>?您正在此处查找两个选项之一。您可以从等式中取出内存指针分配,并传递标准变量的内存地址:
void setup(int* helo)
{
*helo = 8;
}
int main(int argc, char* argv[]) {
int helo = 0;
setup(helo);
printf("Value: %d\n", helo);
getchar();
return 0;
}
或者,如果您想坚持您的方法,您的函数签名需要更改,以接收指向指针的指针:
void setup(int** helo) {
*helo = (int*) malloc(sizeof(int));
*(*helo) = 8;
}
int main(int argc, char* argv[]) {
int* helo = NULL;
setup(&helo);
printf("Value: %d \n", (*helo));
getchar();
return 0;
}
原因是setup(int*helo)
收到int*helo
在main()
中声明的副本,并且该本地副本将指向相同的位置。因此,无论您在setup()
内部对helo
执行什么操作,都将更改变量的本地副本,而不是helo
来自main()
。这就是为什么您需要将签名更改为设置(int**helo)
您正在这里寻找两个选项之一。您可以从等式中取出内存指针分配,并传递标准变量的内存地址:
void setup(int* helo)
{
*helo = 8;
}
int main(int argc, char* argv[]) {
int helo = 0;
setup(helo);
printf("Value: %d\n", helo);
getchar();
return 0;
}
或者,如果您想坚持您的方法,您的函数签名需要更改,以接收指向指针的指针:
void setup(int** helo) {
*helo = (int*) malloc(sizeof(int));
*(*helo) = 8;
}
int main(int argc, char* argv[]) {
int* helo = NULL;
setup(&helo);
printf("Value: %d \n", (*helo));
getchar();
return 0;
}
原因是setup(int*helo)
收到int*helo
在main()
中声明的副本,并且该本地副本将指向相同的位置。因此,无论您在setup()
内部对helo
执行什么操作,都将更改变量的本地副本,而不是helo
来自main()
。这就是为什么您需要将签名更改为设置(int**helo)
c是传递值的原因。将参数传递给函数时,将生成该参数的副本。您需要接收指针的指针,以实现C++的传递引用功能。
void setup(int** helo) {
*helo = (int*) malloc(sizeof(int));
(*(*helo)) = 8;
}
在那一刻,我们称之为-
setup(&helo) ;
c是通过值传递的。将参数传递给函数时,将生成该参数的副本。您需要接收指针的指针,以实现C++的传递引用功能。
void setup(int** helo) {
*helo = (int*) malloc(sizeof(int));
(*(*helo)) = 8;
}
在那一刻,我们称之为-
setup(&helo) ;
问题是,当我试图读取“helo”时,它仍然是空的,你基本上不是把“空”传递给安装程序了吗?一旦进入设置程序,您将为int分配新的内存-但是该地址是如何与调用者通信的?它应该自动进行通信…如何?helo是一个空指针,它不指向任何地方。将该空指针传递给安装程序,然后将该指针的地址更改为新分配的内存块。你把那段记忆设为8。main中的int*返回值仍然指向null。。您想要的是将指针传递给指针,然后初始化/that/problme是,当我试图读取“helo”时,它仍然是空的,您不是基本上将“null”传递给安装程序吗?一旦进入设置程序,您将为int分配新的内存-但是该地址是如何与调用者通信的?它应该自动进行通信…如何?helo是一个空指针,它不指向任何地方。将该空指针传递给安装程序,然后将该指针的地址更改为新分配的内存块。你把那段记忆设为8。main中的int*返回值仍然指向null。。你想要的是将指针传递给指针,然后初始化/that/Its相同,我得到空值,我不知道为什么,但是在函数中“malloc”工作正常,但不返回值…它是相同的,我得到空值,我不知道为什么,但在函数中“malloc”工作正常,但不返回值。。。