C |高级指针|问题1

null

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的address传递给fun()时,地址pptr处的值是指针p。在fun()中,pptr处的值更改为q的地址。因此,main()的指针p更改为指向新变量q。

此外,请注意,该程序不会导致任何超出范围的问题,因为q是a 静止的 变量即使在函数返回后,静态变量仍存在于内存中。为了一个 汽车 变量,我们可能会看到一些意外的输出,因为在函数返回后,自动变量可能不存在于内存中。 这个问题的小测验

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享