数组指针:
数组指针就是指向数组的指针,它表示的是一个指针,这个指针指向的是一个数组,它的重点是指针。
数组指针:类型名 (*指针名)[数组长度];
首先我们定义一个数组指针,指针取名为p
int(*p)[4];
int (*p)[4];p
先与*
结合,形成一个指针,该指针指向的是有5个整形元素的素组,p
就是指向数组元素地址的指针,本质为指针。
例如,int( *p)[8]声明了一个指针,该指针指向了一个有8个int型元素的数组。下面给出一个数组指针的示例。
#include<stdio.h>
#include<stdlib.h>
void main()
{
int b[12]={1,2,3,4,5,6,7,8,9,10,11,12};
int(*p)[4];
p = b;
printf("%d\n",**(++p));
}
这个结果为5。
上例中,p是一个数组指针,它指向一个包含有4个int类型数组的指针,刚开始p被初始化为指向数组b的首地址,++p相当于把p所指向的地址向后移动4个int所占用的空间,此时p指向数组(5,6,7,8},语句*(++p)﹔表示的是这个数组中第一个元素的地址(可以理解p为指向二维数组的指针,{ 1,2,3.4 } ,{ 5,6,7,8 },{9,10,11,12}。p指向的就是{1,2,3,4}的地址,p就是指向元素,{ 1,2,3,4 },**p指向的就是1),语句**(++p)会输出这个数组的第一个元素5。
指针数组:
指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节。
指针数组:数组类型 *数组名[数组长度];
首先我们定义一个指针数组,指针取名为p
int* p[4];
int *p[4];因为优先级的关系,p先与[ ]结合,说明p是一个数组,然后再与*结合说明数组p的元素是指向整型数据的指针。元素分别是p[0],p[1]...p[3],相当于定义了4个整形指针变量。所以p就是数组元素是指针的数组,本质为数组。
指针数组表示的是一个数组,而数组中的元素是指针。下面给出另外一个指针数组的示例 :
#include<stdio.h>
void main()
{
int i;
int *p[4];
int a[4]={1,2,3,4};
p[0] = &a[0];
p[1] = &a[1];
p[2] = &a[2];
p[3] = &a[3];
for(i=0;i<4;i++)
{
printf("%d\n",*p[i]);
}
return 0;
}
这个结果为1234.