标签:数组指针指针数组
数组指针:a pointer to an array ,指向数组的指针注意:定义了数组指针(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]
标签:数组指针指针数组
原文地址:http://blog.51cto.com/13665347/2116769