我正在用 C 语言编写一个递归函数,并决定在参数中传递一个指向布尔变量的指针,而不是负责停止该函数的全局变量。我决定练习一个更简单的例子:
#include <stdio.h>
#include <stdlib.h>
int f(short unsigned int* q, short unsigned int N){
if (N >= 5 || *q > 10){
return 0;
}
else{
*q = 1 + f(q, N+1);
return *q;
}
}
int main()
{
short unsigned int* q;
*q = 1;
f(q, 1);
printf("%u", *q);
}
但是,程序并没有工作(在main函数中,我进一步显示了指针地址处的内容,但是程序没有向控制台输出任何内容,进程以代码-1073741819(0xC0000005)结束)。帮我找出问题所在
问题在这里:
您误解了指针的工作-必须首先保留指针的内存,而您没有这样做。因此,未定义的行为和所有其他影响。
你可以修复这样的事情:
这里重要的是要理解,我们为变量 q 获取堆栈上的内存,之后我们在函数中使用指向它的指针。