指针数组
我们还是通过一个例子来看:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 1;
int b = 2;
int c = 3;//三个毫无关系的整型变量
int arry[3];//多个整数,叫做整数数组
//这么定义指针数组
int* p[3];//多个指针,叫做指针数组,数组中的每一项元素都是一个指针变量
//指针变量是存放地址的变量
p[0] = &a;
p[1] = &b;
p[2] = &c;//三个普通没有任何关系的整型变量的地址存入指针数组。
int i;
for(i=0;i<3;i++)
{
printf(" %d \n",*(p[i]));
}
system("pause");
return 0;
}
数组指针
指针数组”->多个指针,“数组指针”->一个指针
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arry[3] = {1,2,3};
int (*p)[3];//数组的指针
p = arry;
system("paus;e");
return 0;
}
仅仅从上边来看我们看不出区别那么我们看一下偏移值。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arry[3] = {1,2,3};
int (*p)[3];//数组的指针,强调的是类型,数组的个数,偏移值偏移了整个数组的大小
p = arry;
int *p2;
p2 = a;
printf("数组的地址是%p\n",a);
printf("数组的地址是%p\n",&a[0]);
printf ("p数组的地址是%p\n",p);
printf ("p2数组的地址是%p\n",p2);
printf ("==============区别=============\n" );
printf ("p++的结果是:%p\n",++p);
printf ("p2++的结果是:%p\n",++p2);
system("paus;e");
return 0;
}
执行结果:
0060FEF8 - 0060FEEC = 1 2
0060FEFO - 0060FEEC = 4
由此我们可以知道:
指向数组的指针偏移时偏移的是整个数组的的大小!