#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