//指针数组
char a[] = "1";
char b[] = "love";
char c[] = "you";
//指针数组 指针数组,本质上还是一个数组,数组的每一个元素类型都是指针
char* p[3]; //这是指针数组的形式
p[0] = a;
p[1] = b;
p[2] = c;
for (int i = 0; i < 3; ++i) {
cout << p[i] << ' ';
}
cout << endl;
int mat[3][4] = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
int* pmat[3]; //这里解释一下,以下的每一次定义都是对数组每一行的指向
pmat[0] = mat[0];
pmat[1] = mat[1];
pmat[2] = mat[2];
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 4; ++j) {
cout << *(pmat[i] + j) << ' '; //这里地址偏移一下代表着同一行相邻的数组,最后打印出来的就是全部数组
}cout << endl;
}
接下来是数组指针,本质上是一个指针,是一个指向数组的指针,也就是说他指向的是一个数组的地址。
int(*p)[5]; // 他的形式是这样的,他也就是比普通的指针多了一个[5],数组指针可以类比成一个二维数组
int main() {
int(*p)[5];
int a[4][5] = { //这里的二维数组每一行只能有5个元素,因为上面已经定义了这个指针的列数是五
{4,3,2,1,0}, //为什么是列数不是行数呢,因为指针会指向数组的每一行,而每一行的下一个数的地址都是相邻的
{9,8,7,6,5},
{6,7,8,9,0},
{5,6,7,8,9}
};
p = a;
cout << p << endl;
cout << p + 1 << endl; //这里我得到的结果A0和B4总共偏移了20个字节,20=4*5=sizeof(int)*5
cout << *p << endl; //这里得到的还是一个地址
return 0;