一维数组
含义
- 这个比较基础,顾名思义即可。
- 定义 int p[5]; 数组包含5个元素,每一个元素都是int型的数据。
用法
- 如何用指针去表示它?
- 我们知道,数组名即为指向数组的指针,这样说也可以,但不是很准确。
- 例如,上面的数组名p,p只是指向了p[0]这个数据的指针,p+1指向了p[1]这个数据的指针…之后的以此类推即可。
- 那么,我们想要用p这个指针如何取到数组中的int数呢?
- 就是这样:*p即p[0] ,(p+1)即p[1],(p+2)即p[2]
int p[3] = {0 ,5, 9};
int *a = p;
for(int i = 0; i<3; i++)
{
cout<<*(a+i)<<endl;
}
指针数组
含义
- 指针数组,看这四个字,归根到底,还是个数组。
- 那么数组里面每一个元素装的是什么呢?是一个指针。
- 定义int *p[5]; 数组包含三个元素,每一个元素都是一个指向int型的指针。
用法
- 如何用指针去表示它?
- 其实与上边的普通数组是一个道理,数组名即为指向数组的指针,这样说也可以,但不是很准确。
- 看到上边的图,你也应该理解什么意思了。p为数组名,p是一个指针,它指向了指针数组的第一个元素,p+1指向了指针数组的第二个元素…以此类推即可。
- 这里注意下,这里拿p指针举例子,p指向的是p[0],而p[0]里面存储的是一个指针呀!所以*p的值并不是“洋葱最里面的那一层(希望你能懂)”,故*p仍旧是一个指针,即*p这个指针是与p[0]里面存储的指针是相同的。
- 所以,我们想找到“洋葱最里面的那个数据”,应该如何啊?拿数组中第一个数据举例:应该为 **(p+0)或**p或*p[0]
int array[3];
int *a=&array[0],*b=&array[1],*c=&array[2];
*a = 6;
*b = 7;
*c = 8;
int *p[3] = {a, b, c};
int **q = p;
for(int i = 0; i < 3; i++)
{
cout<<**(q+i)<<endl;
cout<<*q[i]<<endl;
}
二维数组 | 数组指针
含义
- 二维数组,即形如 int array[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
- 这个二维数组这家伙呢,说白了就是由n个一维数组组成的。
- 例如上边的中二数组,就是由3个int a[4]的一维数组组成的;
- 数组名即为指向数组的指针,这样说也可以,但不是很准确。即array或array[0]是一个指向其第一行一维数组的指针,array[1]是一个指向其第二行一维数组的指针…以此类推
- 然后再说说这个数组指针,数组指针,归根结底,它是一个指针,而且是一个指向数组的指针。
- 例如,int (*p)[4]; 即p是一个指向具有4个int型元素的一维数组的指针。
- 所以,二维数组与数组指针显然可以联系起来。
用法
int array[3][4] = {{1,2,3,4},
{5,6,7,8},
{9,10,11,12}};
int (*p)[4] = array;
for(int i = 0; i < 3; i++ )
{
for(int j = 0; j < 4; j++)
{
cout<<*(*(p+i)+j)<<endl;
cout<<*(p[i]+j)<<endl;
}
}