#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;
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解*((*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;
}
Run Code Online (Sandbox Code Playgroud)
当我随处更换a
时*a
,为什么会出错?
Som*_*ude 11
您在中访问未初始化的指针
*a=b;
Run Code Online (Sandbox Code Playgroud)
此时指向a
一个随机位置,并且具有未定义行为的规则也无法预测会发生什么.对你而言,它似乎是一个你无法写入的位置,因此你会崩溃.
第二种变体是有效的,因为你a
指出b
,你不写入未初始化的指针,你实际上初始化指针与第一项的位置b
.