请查看以下代码
#include <iostream>
using namespace std;
int main()
{
int a = 5;
int *aPtr1 = &a;
int *aPtr2 = aPtr1;
int *aPtr3 = aPtr2;
cout << "'a' value: " << a << endl;
cout << "'aPtr1' value: " << *aPtr1 << endl;
cout << "'aPtr2' value: " << *aPtr2 << endl;
cout << "'aPtr2' value from 'aPtr3': " << **aPtr3 << endl;
}
在这里,在最后一行,我试图从'aPtr3'获取'aPtr2'值。换句话说,这是我试图找到'之前的指针'。但它给了我错误
PointerTest.cpp:16: error: invalid type argument of `unary *'
我怎样才能做到这一点?请帮忙!
答案 0 :(得分:3)
aPtr3
等于aPtr2
。 aPtr2
是a
的地址。撰写*aPtr3
时,您已经访问了其中包含的地址指向的值(即a
的地址)。
如果你想使用这种语法,你应该有
int **aPtr3 = &aPtr2;
答案 1 :(得分:2)
**aPtr3
唤起未定义的行为。 aPtr3
不是指向int的指针;它是一个指向int的指针。只需执行以下操作即可修复代码:
<< *aPtr3 << endl
您的代码引发了未定义的行为,因为**aPtr3
归结为*5
。