关于数组给指针赋值的问题

观察以下代码:

int main()
{
    int a[3][3];
    int *p;
    int(*q)[3];
    int **r;
    p = &a[0][0];
    //p = a; 错误
    q = a;
    // q = &a[0][0]; 错误

    int **b = new int*[3];
    for (int i = 0; i < 3; i++)
        b[i] = new int[3];
    p = &b[0][0];
    r = b;

    return 0;
}

虽然&a[0][0]和a在数值上是一样的,但这两个是不同的类型,&a[0][0]是int*类型,而a是int(*)[3]类型,所以上边注释的两句是错的。
而对于动态分配的二维数组而言,b就是int**类型了,这是因为每个b[j]是一个int*类型,而这个int*又是一个一维数组,所以q=b就是错的。而它的这个特征使得在访问动态分配的二维数组的元素时,只能用b[i][j]或 * (*(b+i)+j),而不用像普通二维数组那样用b[i*3+j]。

    原文作者:sxl_ove
    原文地址: https://blog.csdn.net/shi923281339/article/details/72121621
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞