数组指针和指针数组的区别

数组指针: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]

猜你喜欢

转载自blog.51cto.com/13665347/2116769
今日推荐