#include <iostream> using namespace std; static inline void test(int *q, int **p) { *p = q; } int main() { int q = 1; int **p = NULL; test(&q, p); cout << **p << endl; return 0; } 这哪里有问题
时间: 2024-04-14 15:30:35 浏览: 218
在这段代码中,存在一个问题。在调用`test(&q, p)`时,`p`是一个指向指针的指针,并且它的初始值是`NULL`。然而,在`test`函数中,使用了对`p`的解引用操作`*p = q;`,这会导致未定义行为,因为`p`指向的地址是无效的。
要解决这个问题,你可以将`p`声明为一个指向指针的指针,并在调用`test`函数时传递其地址,如下所示:
```cpp
int main()
{
int q = 1;
int *p = NULL;
test(&q, &p);
cout << *p << endl;
return 0;
}
```
这样做将会将`q`的地址传递给`test`函数中的`q`参数,同时将`p`的地址传递给`test`函数中的`p`参数,从而正确地将`q`的值赋给了`p`。然后,你可以通过解引用操作符`*p`来访问`q`的值。
阅读全文