数组指针:a pointer to an array ,指向数组的指针 指针数组:array of pointer ,用于存储指针的数组,即数组元素都是指针 int (p)[6] 数组指针 :表示指向数组a的指针 元素表示:(a)[i] (指向一维数组的指针,也成行指针) int p[6] 指针数组 :表示数组a中的元素都是int 型,即int型指针 元素表示:(a[i]) 或者a[i] ([]优先级高于*) 代码: #include<iostream> using namespace std; int main() { int a[4] = { 1,2,3,4 }; int* b[4]; //指针数组 int(*c)[4]; //数组指针 c = &a; //让c指向a的首地址 for (int i = 0; i<4; i++) { b[i] = &a[i]; //b数组的元素为指针,即元素内容为地址 } cout << *b[1] << endl; //b[1]=&a[1],即b[1]中为地址(该地址中存入的是数据2) , *b[1]即取&a[1]中的元素内容,即2 cout << (*c)[2] << endl;//可将(*c)看成数组名,相当于a,(*c)[2]=a[2],即为3 return 0; } 执行结果: 2 3
注意:定义了数组指针(*c)[i],就必须给这个指针一个地址c=&a,不能不给指向(地址)就直接赋值((*c)[i]=a[i]),否则会出错 技巧:可以将数组指针的(*c)看成一个数组名使用
数组指针 int (*p)[6] ()优先级高,说明p是一个指针,指向一个int型的一维数组,这个数组的长度是n,也就是p的步长为n,执行p+1(p要跨过n个整型数据的长度) int a[3][4]; int (*p)[4]; //定义一个数组指针,指向含4个元素的以为数组 p=a; //将二维数组a的首地址赋给p,即a[0]或&a[0][0] p++; //该语句执行后,即p=p+1,p跨过行a[0]指向了行a[1]
#include<iostream> using namespace std; int main() { int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int(*p)[4]; p = a; cout << (*p)[0] << endl; p++; cout << (*p)[0] << endl; cout << *((p)+1)<< endl; //((*p)+1)相当于(*p)[1] ,*p此时为一个地址
} 执行结果: 1 5 6
*指针数组 ** int p[n] []优先级高,先与p结合成为一个数组,再由int说明这是一个整型指针数组,它由n个指针lexington的元素组成(这里执行p+1是错误的,这样赋值也是错误的:p=a,p是个不可预知的表示,只存在p[0],p[1]….p[n-1],它们分别是指针变量可以用来存放变量地址),可以这样p=a;这里*p表示指针数组第一个元素的值,a的首地址的值 int *p[3]; //表示一个一维数组内存放着三个指针变量,分别是p[0],p[1],p[2] int a[3][4]; for(i=0;i<3;i++) p[i]=a[i];
ps:数组指针只是一个指针变量,它占有内存中一个指针的存储空间,指针数组是多个指针变量,以数组形式存在内存中,占有多个指针的存储空间 指针数组要表示数组中第i行第j列的元素: (p[i]+j) ((p+i)+j) ((p+i))[j] p[i][j]
















