Loading

二维数组与数组指针之间的关联

二维数组与数组指针之间的关联

思考起点

如何通过指针来读取数组内局部数据

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

舒服了,截取出来还是数组的用法。

总结

对于数组来说,他的本质就是指针,但是对于二维以上的数组,我们不能用单例指针来替换,尽管可以实现,我们可以通过数组指针来实现,保持了原有数组的特性。

posted @ 2020-11-29 19:55  流缘飞雨  阅读(152)  评论(0)    收藏  举报