美文网首页
二维数组与指针

二维数组与指针

作者: juriau | 来源:发表于2020-03-04 15:37 被阅读0次

    声明:int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

    二维数组与行指针

    二维数组名是一个行指针(常量)

    printf("%d", a[0]);  // 报错
    printf("%d", *a[1]); // 输出5
    

    定义行指针

    int (*p)[4];
    p = a;
    printf("%d", p[1][2]); // 输出7
    

    注意int* p[4]是指针数组,而int** p是二重指针。只有int (*p)[4]才是行指针。

    作为函数参数,我们可以定义形式参数为int a[3][4]int a[][4]int (*p)[4]

    二维数组与二重指针

    使用二重指针可以建立二维数组

    int val = 0;
    int **arr = (int **)malloc(sizeof(int*) * 3); // 二维数组
    for (int i=0; i<3; i++) {
        arr[i] = (int *)malloc(sizeof(int) * 4);
        for (int j =0; j<4; j++) {
            arr[i][j] = val++;
        }
    }
    

    然后我们可以把这个二重指针当作二维数组名来访问数组元素

    void printArray2(int **arr, int row, int col){
        for (int i=0; i<row; i++) {
            for (int j=0; j<col; j++) {
                printf("%d\t", arr[i][j]);
            }
            printf("\n");
        }
    }
    

    我们得到结果如下:

    0   1   2   3   
    4   5   6   7   
    8   9   10  11  
    

    注意:我们可以把这个二重指针当作二维数组名来使用,**但是二维数组名并不是二重指针,二维数组名是行指针。

    int **p=a // 报错
    

    相关文章

      网友评论

          本文标题:二维数组与指针

          本文链接:https://www.haomeiwen.com/subject/aaemlhtx.html