C++笔记 指针与数组 指针数组与数组指针_Love coldplay的博客-优快云博客
数组指针,它是指向一个数组的指针。
指针数组,它是一个数组,数组中每个元素都是指针。
//一维数组a和二维数组b
int a[5] = {1, 2, 3, 4, 5};
int b[3][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};
//普通指针ptr1,类型为int*,值为数组a的第一个元素的地址,
//ptr1 + 1等价于地址向前移动一个int的内存大小(即4字节)
int* ptr1 = a;
//数组指针ptr2,类型为int (*)[5],代表一个指向有5个元素数组的指针,
//值为数组a的第一个元素的地址,ptr2 + 1等价于地址向前移动一个数组的内存大小(即20字节)
int (*ptr2)[5] = &a; //&不可去掉,a类型是int*,&a类型是int (*)[5]
//指针数组ptr3,[]优先级高于*,故ptr3是有4个元素的数组,
//数组中的每个元素都是int*类型的指针
int *ptr3[4];
//数组指针常用来表示二维数组,p指向拥有四个元素的数组,p的值为二维数组第一个元素的地址
int (*p)[4] = b; //b是二维数组名,不用加&,b作为指针时其类型为int (*)[4],值为b[0][0]的地址
//输出16 16,*p表示b的第一行数组,*(p+1)表示b的第二行数组
cout << sizeof(*p) << " " << sizeof(*(p+1)) << endl;
//输出0 0,二者都指向b[0][0]
cout << *p[0] << " " << **p<< endl;
//输出4 4,二者都表示b[1][0]
cout << *(p+1)[0] << " " << **(p+1) << endl;