目录
一、数组指针和指针数组的区别
1.1 数组指针
数组指针就是指向数组的指针,它表示的是一个指针,这个指针指向的是一个数组,它的重点是指针。例如,int (*pa)[8]声明了一个指针,该指针指向了一个有8个int型元素的数组。下面给出一个数组指针的示例。
#include<stdio.h>
#include<stdlib.h>
void mian()
{
int a[8]={1,2,3,4,5,6,7,8};
int (*p)[4];
p=a;
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}。 P指向的就是{1,2,3,4}的地址,*p就是指向元素,{1,2,3,4} , **p指向的就是1),即语句 **(++p)会输出这个数组的第一个元素5。
1.2 指针数组
指针数组表示的是一个数组,而数组中的元素是指针。下面给出一个指针数组的示例。
void mian()
{
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",*p[i]);
printf("