今天我们来讲讲指针数组和数组指针。
我们来看看下面那个数指针数组哪个是数组指针:
int * p[2];
int (* p)[2];
好的不知道也没关系我们今天就来教你。
1指针数组
首先我们要弄秦楚指针数组到底是数组还是指针。
指针数组他是一个数组,是一个存放指针的数组,
指针数组的每个元素是地址,⼜可以指向⼀块区域。
形式:
指针类型+变量名+[数组长度]。
例如:int* p[10];
注意:[]的优先级高于*所以是先和[] 结合;
他可以用来存放指针的也就是里面的元素是地址:
如:
#include<stdio.h>
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};
int b[3]={1,2,3,4};
int c[3]={6,7,8};
int *p[10]={a,b,c};
return 0;
}
1.2指针数组和二维数组
他和二维数组有点联系:用图来表示更清晰:
prr[i]是访问数组里面的第i个元素,而他里里面的元素有指向一个地址,是一个整形数组的首元素的地址那么就可以用prr[i][j]去访问整形数组里面的元素。
下面这段代码更加清晰:
#include <stdio.h>
int main()
{
int arr1[] = {1,2,3,4,5};
int arr2[] = {2,3,4,5,6};
int arr3[] = {3,4,5,6,7};
//数组名是数组⾸元素的地址,类型是int*的,就可以存放在parr数组中
int* parr[3] = {arr1, arr2, arr3};
int i = 0;
int j = 0;
for(i=0; i<3; i++)
{
for(j=0; j<5; j++)
{
printf("%d ", parr[i][j]);
}
printf("\n");
}
return 0;
}
2数组指针
首先数组指针他是一个指针,存放数组的地址,所以他是指向一个数组的指针变量。
形式:
类型+(*变量名)+[数组长度]。
例如:int (*p)[10];
注意:[]的优先级高于*所以是先和[] 结合;
p先和*结合,说明p是⼀个指针变量变量,然后指着指向的是⼀个⼤⼩为10个整型的数组。所以
p是⼀个指针,指向⼀个数组,叫 数组指针。
数组指针的初始化:
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};
int (*p)[10]=&a;
//&a取出的是数组的地址
return 0;
}
这里的p指向的是一个一个数组大小为10;
如果还有什么疑问可以在评论区讨论或者私信。