Function C通过参数返回答案(参考)

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);

为什么大家,

请考虑这个小代码,帮助我弄明白为什么它不起作用?< /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);
    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”工作正常,但不返回值。。。