关于指向二维数组的指针的问题

假如有二维数组
int a[3][4];

要定义一个指向他的指针,查了一下,方法好像是这样
int (*p)[4];

但是这是再数组a的维度已知的情况下
那如果
int a[i][j];
的情况下要如何定义呢?比方说i,j都由其他函数决定。

谢谢

作者: crucifyhcy   发布时间: 2011-06-13

p不是指向a的指针,而是指向a的首元素的指针,如果有p = a;的话。

指向a的指针是这样的:int ( *p )[3][4] = &a;

如果是int a[i][j],这是VLA,可变长数组,目前只有C99才支持VLA,一个指向VLA的指针称为VM,即可变改类型,是这样的:int ( *p )[i][j] = &a;在赋值的同时,p类型派生中的i和j的值要与a定义时的i和j的值相等,否则两者是不相容的,不能赋值。

作者: supermegaboy   发布时间: 2011-06-13

int a[3][4];

int (*p)[4] = a[0];
p = a[1];
p = a[2];
p是指向(有三个int元素的)数组的指针,
对于a[i][j]维数未知情况下不能定义指向数组的指针。

作者: dizuo   发布时间: 2011-06-13

C/C++ code

    int i=10;
    int j=10;
    int **a=new int*[i];
    for (int index=0;index<i;index++)
    {
        a[index]=new int[j];
    }

作者: Demon__Hunter   发布时间: 2011-06-13