0

请看下面的代码

#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 *'

我怎样才能做到这一点?请帮忙!

4

2 回答 2

3

aPtr3等于aPtr2。并且aPtr2是 的地址a。在编写 时*aPtr3,您已经访问了它所包含的地址所指向的值(即 的地址a)。

如果你想使用这种语法,你应该有

int **aPtr3 = &aPtr2;
于 2012-10-30T17:47:11.130 回答
2

**aPtr3唤起未定义的行为。 aPtr3不是指向 int 的指针;它是一个指向 int 的指针。只需执行以下操作即可修复代码:

<< *aPtr3 << endl

您的代码引起了未定义的行为,因为**aPtr3归结为*5.

于 2012-10-30T17:54:57.887 回答