📜  C |高级指针|问题1

📅  最后修改于: 2021-05-25 18:40:59             🧑  作者: Mango

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基础课程》。