#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
时,为什么会出错?
答案 0 :(得分:11)
您可以在
中访问未初始化的指针*a=b;
此时a
指向随机位置,而未定义行为的规则也无法预测会发生什么。对你而言,它似乎是一个你无法写入的位置,因此你会崩溃。
第二个变体有效,因为你将a
指向b
,你没有写入未初始化的指针,你实际上初始化指针的位置b
中的第一项。