这个变量 num 保持为 0。我怀疑这是因为我传入了一个 NULL 指针,但我被限制在主(和参数)中。如何调整辅助函数的内容以正确更新 num?
int main(void) {
int * num_results = NULL;
int num = 4;
set(num_results, num);
printf(“%d\n”, *num_results);
return 0;
}
void set(int * results,num){
num_results = malloc(sizeof(int));
*num_results = num;
}
Run Code Online (Sandbox Code Playgroud)
我会猜测你对你的问题的真正意思,并尝试给出一个体面的答案。
我猜你想通过将它作为指针传递给函数来改变num_results等于,我可以看到你犯了一些错误:numset
#include <stdio.h>使用printf()和#include <stdlib.h>使用malloc()set()应该在之前声明main(),你可以通过在之前声明一个原型main()或简单地在set()之前定义函数来做到这一点main()。现在让我们来看看您的解决方案:您想将num_results作为参数传递给函数,分配一些内存并将地址分配给num_results,然后将值更新为num.
当您将 anint *作为参数传递时,我想您已经知道通过传递int您只是提供了一个int变量内部内容的副本。这与 的工作方式相同int *,您不会传递对 的引用,num_results以便您可以更新指针的地址,而是传递当前地址的副本,NULL不会被修改。什么可以被修改是什么,是当前地址内,但目前的地址NULL,所以不能够真正被修改。
由于您要分配内存并将其地址分配给num_results,您必须传递一个指向指针的指针,因此您传递的int*是保存变量的地址以及您可以实际更改它的地址。
这样,您的函数应该看起来像,void set(int ** results, int num)并且您应该使用 调用它set(&num_results, num),因此您传递了对 num_results 的引用,您可以在其中更改它当前指向NULL的地址,然后是由 返回的地址malloc()。
您还必须更改函数的主体,因为您现在使用的是int **,您想将新地址分配给*results, 因为results == &num_results,并将 num 分配给**results, 因为*results = num_results。
我希望我的解释不会很混乱,希望有人可以用另一个答案或编辑我的答案更好地解释它。最终代码:
#include <stdio.h>
#include <stdlib.h>
void set(int ** results, int num){
*results = malloc(sizeof(int));
**results = num;
}
int main(void) {
int * num_results = NULL;
int num = 4;
set(&num_results, num);
printf("%d\n", *num_results);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8643 次 |
| 最近记录: |