数组是c语言中的一种复合数据类型,是相同数据类型的有序集合
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int main()
{
int a=10;
int Array[10]={1,2,3,4,5,6,7,8,9,10};//定义一个可以存放十个int型数据的数组
int *pArr=NULL;
pArr=Array;
//Array=&a;
printf("%d\n",Array);
printf("%d\n",Array+1);
printf("pArr[5]:%d\n",pArr[5]);
printf("*(pArr+5):%d\n",*(pArr+5));
pArr=Array+3;
printf("pArr:%d\n",*pArr);
printf("pArr[-1]:%d\n",pArr[-1]);
return 0;
}
运行结果
通过以上代码可以知道
- 数组名是一个指针,而且是常量指针,不可改变指向
- 数组名指向数组的第一个元素并不指向整个数组,因为步长不是整个数组的长度
- 可以使用指针访问数组元素和使用数组下标访问数组元素一样
- [ ]中的数字代表偏移量
数组与指针的区别
- 数组并不是指针。
- 指针保存的是数据的地址,数组保存数据本身,指针间接访问数据,首先取得指针的内容,把他做为地址,从这个地址提取数据;数组直接访问数据
- 数组做为函数参数时会退化为指针。
多维数组
int main()
{
char marray[3][10]={"abc","bfrtg","lfjllif"};
//char *p=marray;
char (*p)[10];
p=marray;//指向数组的指针
printf("marray[0]:%s\n",marray[0]);
printf("marray[1]:%s\n",marray[1]);
printf("marray[1][2]:%c\n",marray[1][2]);
printf("*(*(marray+1)+2):%c\n",*(*(marray+1)+2));
printf("p:%s\n",*p);
printf("p:%s\n",*(++p));
}
- 多维数组其实是一个数组的数组,数组名也是一个常量指针,指向他的第一个数组元素,是一个数组指针,可以通过指针访问数组元素,* (*(marray+i)+j)与marray[i][j]是一样的。 char (*p)[10]声明数组指针。