1. int* p[4]
含义:由于[]
的优先级大于*
,所以其强调是一个数组,数组内的每个元素均是一个指向int
的指针。
int *p[4];
for (int i = 0; i < 4; i++)
p[i] = &i;
cout << p[0] << endl; // 0x61fefc
cout << *p[0] << endl; // 4
至于为什么会是4? 不太懂,将来再解决。
2. int (*p)[4]
含义:强调是一个指针,特指行指针,指向的是一个int
的,大小为4的数组。
int arr[2][4]{{1, 2, 3, 4}, {5, 6}};
int(*p)[4] = arr;
cout << (*p)[1] << endl; // 2
cout << (*(p + 1))[1] << endl; // 6
cout << p + 1 << endl; //0x61fefc
cout << arr[1] << endl; //0x61fefc
cout << *(arr[1] + 1) << endl; // 6
行指针:顾名思义,指向一行数组的开头;例如int arr[2][4]{{1, 2, 3, 4}, {5, 6}};
行指针指向第0行和第1行。
所以p
等同于arr[0]
, p + 1
等同于arr[1]
。