1
#include <iostream>
using namespace std;

int main ()
{
    int **a;
    int b[5] = {3,4,5,6,1};
    *a=b;
    cout << *((*a)+0) << endl;
    return 0;
}

根据我的理解*((*a)+0)相当于(*a)[0]。我错了吗?如何让上面的代码打印数组的第一个元素?

为什么这段代码有效?

#include <iostream>
using namespace std;

int main ()
{
    int *a;
    int b[5] = {3,4,5,6,1};
    a=b;
    cout << *(a+0) << endl;
    return 0;
}

当我替换a*a到处时,为什么会出错?

4

1 回答 1

11

您访问一个未初始化的指针

*a=b;

此时指向a一个随机位置,并且与未定义行为的规则一样,您无法预测会发生什么。对您来说,这似乎是一个您无法写入的位置,因此您会崩溃。


第二个变体之所以有效,是因为您a指向b,您不会写入未初始化的指针,而是使用b.

于 2013-06-29T16:10:21.743 回答