通过指针引用数组
一.定义一个指针指向数组
1.如何定义
int array[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p = array;//这样子定义指针p指向array[0][0]的地址
以上定义方式指针p指向array数组的起始地址
2.如何使用
代码一,二维数组当成一维数组使用
//利用指针对数组元素逐个访问
int len;
len = sizeof(array)/sizeof(array[0][0]);//使用关键字sizeof求数组的长度
printf("array数组元素如下:\n");
for(int i=0;i < len; i++){
printf("%d ", *p++);
}
代码二,数组指针对二维数组进行访问
//第二种方法,通过数组指针来访问
int (*p)[4];//数组指针
printf("\n方法2,通过数组指针来访问:\n");//换行
p = array;
for(i = 0; i < 3; i++){
for(j = 0; j < 4; j++)
printf("%4d,", *(*(p + i) + j));//数组指针*(p+i)是父数组偏移地址,再加上j是子数组偏移地址,格式如左示
printf("\n");//换行
}
数组指针
概念:是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组
数组指针格式:int (* p)[4];
引入父子数组的概念
1.父数组-行数组
array+1则偏移一行地址,即指向数组第二行首个元素的地址
2.子数组-列数组
array[0]+1则偏移一列地址,即指向数组第一行第二个元素的地址
或者写法2
*(array+0)+1则偏移一列地址,即指向数组第一行第二个元素的地址