指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针
数组指针:a pointer to an array,即指向数组的指针,也称为行指针,返回值为指针。
指针数组:
#include#include int main(){ //char *str[3] = {"Hello", "I'm ok", "Well"}; char animal[20] = "you are a bear"; char *str[3]; str[0] = new char[20]; str[1] = new char[20]; str[2] = new char[20]; strcpy(str[0], "hello"); strcpy(str[1], "I'm a good boy"); strcpy(str[2], "ok"); std::cout << str << std::endl; std::cout << &str[0] << std::endl; std::cout << str[0] << std::endl; std::cout << str[1] << std::endl; std::cout << str[2] << std::endl; std::cout << animal << std::endl; delete [] str[0]; delete [] str[1]; delete [] str[2]; return 0;}
运行结果:
数组指针:
int main(){ int a[2][2]={1,2,3,4};//这是一个2*2的二维数组 int (*p)[2];//数组指针 p=a;//令p指向数组a std::cout << *p[0] << std::endl; std::cout << *(p[0]+1) << std::endl; std::cout << *p[1] << std::endl; std::cout << *(p[1]+1) << std::endl;}
运行结果:
分析:
a是一个数组名,类型是指向一维数组的指针,不是变量,a的值是指针常量,即不能有a++或者a=p这些操作。a指向这块连续空间的首地址,值是&a[0][0]。
a[0]是一维数组名,类型是指向整型的指针,值是&a[0][0],这个值是一个常量。
a[1]是一维数组名,类型是指向整型的指针,值是&a[1][0],这个值是一个常量。
p是一个数组指针变量,指向一维数组的指针变量,值是&a[0][0]。可以执行p++;p=a等操作。
虽然a跟a[0]值是一样,但类型不一样,表示的意义不一样。通过分析就不难理解为什么*(*(a+i)+j)和a[i][j]等效了。
指针数组和数组指针示例:
int main(){ int a[2][2]={1,2,3,4};//这是一个2*2的二维数组 int (*p)[2];//数组指针 int *q[2];//指针数组 p = a; //令p指向数组a q[0] = a[0]; q[1] = a[1]; std::cout << *q[0] << std::endl; std::cout << *(q[0]+1) << std::endl; std::cout << *q[1] << std::endl; std::cout << *(q[1]+1) << std::endl; std::cout << *p[0] << std::endl; std::cout << *(p[0]+1) << std::endl; std::cout << *p[1] << std::endl; std::cout << *(p[1]+1) << std::endl;}
运行结果: