数组指针: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
using namespace std;
int main()
{
int a[4] = { 1,2,3,4 };
int
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
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]
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
新闻名称:数组指针和指针数组的区别-创新互联
文章转载:http://scpingwu.com/article/hpjse.html