#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
无处不在,为什么错了?
您没有为'a'分配任何内存。 – Musa
您将指向int *的*指针赋值给作为指向int指针的'a'的'a'。所以你必须将* pointer *的内存分配给'int指针'。 – Nawaz
这样看待:'int * a'可以看作'(no_adr_ptr)a',当你做'a = b'时它会变成'(adr_of_b)a'; 'int ** a'变成'(no_adr_ptr(no_adr_ptr)a)',当你做'* a = b'时变成'(no_adr_ptr(adr_of_b)a)'。 hth – slashmais