在“理解 C 中的指针”一书中,在解释了参数后,有一些已解决的问题。第 22 页,问题 N.5 我将附上代码和解释。在那之后,会有我的问题。
#include <stdio.h>
int main()
{
int *c;
c = check(10, 20);
printf("c = %p\n",c);
return 0;
}
int * check(int i, int j)
{
int *p, *q;
p = &i;
q = &j;
if(i >= 45)
{
return p;
}
else
{
return q;
}
}
输出:错误消息:main 中的非可移植指针分配
说明 错误的原因很简单。传递给 check() 的整数被收集在 i 和 j 中,然后将它们的地址分配给 p 和 q。然后在下一条语句中,根据 45 测试 i 的值,并返回存储在 p 中的地址或存储在 q 中的地址。看起来这个地址会在 main() 中的 c 中收集,然后他会打印出来。这就是错误所在。函数 check( ) 不能返回整数指针。它所能返回的只是一个普通的整数。因此仅将 c 声明为整数指针是不够的。我们必须在程序中进行以下修改才能使其正常工作
#include <stdio.h>
int * check(int, int);
int main()
{
int *c;
c = check(10, 20);
printf("c = %p\n",c);
return 0;
}
int *check(int i, int j)
{
......
......
}
在我看来,这没有意义。作者为了在第一段代码上故意出错,尝试在 main 中使用一个指向未分配内存区域的指针。但是他“试图”解决问题的方式根本不正确,他没有改变任何东西!相反,他应该在 check() 函数中分配一些内存区域。我对么?