每个人,
请考虑这个小代码,并帮我弄清楚,为什么它不起作用?
#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;
}
答案 0 :(得分:3)
您正在寻找两个选项之一。您可以取出等式的内存指针分配,并传递标准变量的内存地址:
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()
副本,此本地副本将指向同一位置。因此,无论您对helo
内的setup()
做什么,都会更改变量的本地副本,而不会helo
更改main()
。这就是您需要将签名更改为setup(int** helo)
。
答案 1 :(得分:0)
您可以尝试printf("Value: %d \n", (*helo));
代替printf("Value: %s \n", (*helo));
吗?
答案 2 :(得分:0)
c 按值传递。将参数传递给函数时,会生成一个副本。您需要接收指针指针,以实现通过引用传递的C ++特性。
void setup(int** helo) {
*helo = (int*) malloc(sizeof(int));
(*(*helo)) = 8;
}
并称之为 -
setup(&helo) ;