思考起点:
如何通过指针来读取数组内局部数据?
1.使用小数组来截取大数组
int main()
{
int a[8]={1,2,3,4,5,6,7,8};
int b[2]={};
b = a;
printf("%d\n",b[0]);
return 0;
}
error: incompatible types in assignment of ‘int [8]’ to ‘int [2]’
编译失败,左右类型不一致;改进一下
2.使用指针来截取
int main()
{
int a[8]={1,2,3,4,5,6,7,8};
int *b;
b = a+2;
printf("%d\n",b[0]);
return 0;
}
reslut:
3
初步实现数据截取,测试二维数组
3.使用指针截取二维数组
int main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int *b;
b = *(a+1);
printf("%d\n",*((b+4*1)+1));
return 0;
}
reslut:
10
也实现了,但是总觉得少了点味道,变味的数组,*((b+4*1)+1),调用起来还得自己去算,这点可以通过设置常量解决,但是这个式子打起来是真的累,在改改。
4.使用数组指针(集合指针)截取二维数组
typedef int (*ptest)[4];
int main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
ptest b;
b = a+1;
printf("%d\n",b[1][1]);
return 0;
}
reslut:
10
舒服了,截取出来还是数组的用法。
总结
对于数组来说,他的本质就是指针,但是对于二维以上的数组,我们不能用单例指针来替换,尽管可以实现,我们可以通过数组指针来实现,保持了原有数组的特性。
原文:https://www.cnblogs.com/haoge2000/p/14057600.html