void fun(int *p)
{
int q = 10;
p = &q;
}
int main()
{
int r = 20;
int *p = &r;
fun(p);
printf("%d", *p);
return 0;
}
(A) 10
(B) 20
(C)编译器错误
(D)运行时错误答案: (B)
说明:在fun()内部,q是指针p的副本。因此,如果我们将q更改为其他指向,则p不会受到影响。如果要在另一个函数内更改一个函数的局部指针,则必须将指针传递给该指针。通过将指针传递给指针,我们可以将指针更改为指向其他对象。请参见以下程序作为示例。
void fun(int **pptr)
{
static int q = 10;
*pptr = &q;
}
int main()
{
int r = 20;
int *p = &r;
fun(&p);
printf("%d", *p);
return 0;
}
在上面的示例中,函数fun()需要一个双指针(指向整数指针的指针)。 Fun()修改地址pptr处的值。当我们将p的加法器传递给fun()时,地址pptr上的值是指针p。在fun()中,将pptr的值更改为q的地址。因此,main()的指针p更改为指向新变量q。
另外,请注意该程序不会引起任何超出范围的问题,因为q是静态变量。即使函数返回后,静态变量仍存在于内存中。对于自动变量,我们可能会看到一些意外的输出,因为在函数返回后,自动变量可能不存在于内存中。这个问题的测验
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。