zoukankan      html  css  js  c++  java
  • 二维数组的指针,指针构成的数组

    在学习C Primer Plus中,发现:

    第十章使用的大部分是二维数组的指针这种形式,即

    int (* pz) [2];

    第十一章出现了指针的数组形式,即

    const char *mytal[LIM];

    于是我有点懵逼了,到底这俩货是什么意思,可以互相代替吗?下面自己举例子试试看。

    比如我想表示一个二维数组,{{1,2,3},{4,5,6},{7,8,9},{10,11,12}},三行四列,用两种方式试试看。

    /* 二维数组的指针 与 指针的数组 */
    #include <stdio.h>
    
    int main(void)
    {
        int i,j;
        int zippo[4][3] = {
                            {1,2,3},
                            {4,5,6},
                            {7,8,9},
                            {10,11,12}
                          };
        int (*pa)[3];    //二维数组的指针
        int *pb[4];      //指针的数组(4个指针构成的一个数组,每个指针指向一个int型)
    
        pa = zippo;
    
    //  pb = zippo;     //表达式必须是可修改的左值?说明pb是常量,pb是一个数组名,代表了首元素pb[0](一个指针变量)地址:&(pb[0])
                        //这是一个常量,说明了在C语言中,声明一个变量的同时也给他分配了固定的地址!
    
        pb[0] = zippo[0];//pb[0]是一个指针变量,存放的地址是地址&zippo[0][0]
        pb[1] = zippo[1];//pb[1]是一个指针变量,存放的地址是地址&zippo[1][0]
        pb[2] = zippo[2];//pb[2]是一个指针变量,存放的地址是地址&zippo[2][0]
        pb[3] = zippo[3];//pb[3]是一个指针变量,存放的地址是地址&zippo[3][0]
    
        printf("pa:
    ");
        for(i=0; i<4; i++)
        {    
            for(j=0; j<3; j++)
                printf("%-3d",pa[i][j]);
            printf("
    ");
        }
    
        printf("
    
    pb:
    ");
        for(i=0; i<4; i++)
        {
            for(j=0; j<3; j++)
                printf("%-3d",*(pb[i]+j));
            printf("
    ");
        }
    }

    所以,两种使用指针的方式去表示二维数组:

    1.使用二维数组的指针,需要知道每个元素数组中的元素个数,当然元素数组的个数不用说明,留给指针自己控制。例如:

    int (*pa)[3];
    pa = zippo;

    2.使用指针数组,需要知道元素数组(即指针)的个数,当然每个元素数组中的元素的个数不需要说明,留给每个指针自己控制。而且赋值时需要分别对每个指针元素赋值。例如:

    int *pb[4];      //指针的数组(4个指针构成的一个数组,每个指针指向一个int型)
     pb[0] = zippo[0];//pb[0]是一个指针变量,存放的地址是地址&zippo[0][0]
     pb[1] = zippo[1];//pb[1]是一个指针变量,存放的地址是地址&zippo[1][0]
     pb[2] = zippo[2];//pb[2]是一个指针变量,存放的地址是地址&zippo[2][0]
     pb[3] = zippo[3];//pb[3]是一个指针变量,存放的地址是地址&zippo[3][0]



  • 相关阅读:
    「题解」:07.16NOIP模拟T1:礼物
    「题解」:07.16NOIP模拟T2:通讯
    「题解」:图论专题总结
    07.07NOIP模拟赛
    [复习]平衡树splay
    「题解」:[组合数学][DP]:地精部落
    「题解」:[组合数学]:Perm 排列计数
    「题解」:[组合数学]:排队
    dp 杂题
    插头 dp 总结
  • 原文地址:https://www.cnblogs.com/TomLily/p/5851911.html
Copyright © 2011-2022 走看看