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