В C++ Primer 5th Edition, раздел 3.5, стр 115, он дает следующий пример:C++ Primer - Указатели и ссылки на массив
int *ptrs[10]; // ptrs is an array of ten pointers to int
int &refs[10] = /* ? */; // error: no arrays of references
int (*Parray)[10] = &arr; // Parray points to an array of ten ints
int (&arrRef)[10] = arr; // arrRef refers to an array of ten ints
я понял почти все exemples, за исключением одного:
int (*Parray)[10] = &arr; // Parray points to an array of ten ints
чтобы указать на массив, я мог бы просто сделать что-то вроде:
int a[10];
int *p = a;
Поскольку имя «а» также точка er к массиву, теперь p указывает на то же место, что указатель, обозначенный указателем, обозначенным именем «a».
Я попытался скомпилировать пример, приведенный в книге, и я ожидал, что с помощью:
int (*Parray)[10] = &arr; // Parray points to an array of ten ints
будет иметь тот же эффект, как и в примере, который я дал. Проблема заключается в том, что не бывает, вот код:
#include <iostream>
using namespace std;
int main(int argc, char const *argv[]) {
int arr[10] = {1,1,1,1,1,1,1,1,1,1};
int *ptrs[10];
int (*Parray)[10] = &arr;
int (&arrRef)[10] = arr;
cout << *(Parray + 1) << endl;
cout << Parray[1] << endl;
return 0;
}
Этот код компилируется, и дает следующий результат:
0x7fff5c4a2ab8
0x7fff5c4a2ab8
Может кто-нибудь объяснить, что именно:
int (*Parray)[10] = &arr; // Parray points to an array of ten ints
является ? и что я могу с этим сделать?