二维数组和二维指针的理解

二维数组

int edges[5][2] = { {1,2},{2,3},{3,4},{ 1,4 },{ 1,5 } };


下标只是表示偏移量,edges[0] 并不表示 一个指针,其实值为1 ;因此不能直接转化为二维指针来用;

二维数组的下标表示在其实地址上的偏移量,eg:   i*n+j,因此可以转为一维指针来使用,然后通过偏移量去读取相应的值,和二维数组下标的含义一致

二维指针


二维指针表示指针的指针,因此edges[0] 表示的是一个地址,每个地址有指向存储数据的地址;

二维指针赋值的时候首先要申请指针数组,然后给每个数组在申请内存,和二维数组中下标的含义完全不一致。

int edges[5][2] = { {1,2},{2,3},{3,4},{ 1,4 },{ 1,5 } };
    int** data = NULL;
    data = (int**)malloc(5 * sizeof(int*));
    for (int i = 0; i < 5; i++) {
        data[i] = &(edges[i][0]);
    }

注意一下数据类型那一列

 

posted @ 2020-01-19 19:11  博客园—哆啦A梦  阅读(711)  评论(0)    收藏  举报