首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手 * 和 2维 array的不同_Passing 2D array via pointer

2013-04-07 
新手求教: ** 和 2维 array的不同_Passing 2D array via pointervoid foo(float **pm){int i,jfor (i 0

新手求教: ** 和 2维 array的不同_Passing 2D array via pointer

void foo(float **pm)
{
    int i,j;
    for (i = 0; i < 4; i++)
        for (j = 0; j < 4; j++)
            printf("%f\n", pm[i][j]);

}

int main ()
{
    float m[4][4];

    int i,j;
    for (i = 0; i < 4; i++)
        for (j = 0; j < 4; j++)
            m[i][j] = i+j;

    foo(???m???);
}


以上是我在另外一个论坛上看到的问题。那个楼主问如何将m pass给foo (在不更改foo的前提下)以下是另外一个人的回答:

如果楼主坚持要用
void foo(float **pm)


float m[4][4];

由于m是二维array,float **是pointer to pointer,唯一可以做的就是
float *m_rows[4] = { m[0], m[1], m[2], m[3] };
foo(m_rows);


我隐约明白他这么做的道理。但是能不能请大牛详细讲一下,为什么m就不可以呢?不是说m可以看作是一个const pointer to an array of const pointer吗?是因为m固定了每个维度的最大值吗?(我个人的理解,因为我觉得一维array的名称可以看作const pointer to first element,唯一区别是 (array+1)这样的运算成立。)

新手求教,谢谢啦~ c++ pointer
[解决办法]
理解都对,一点瑕疵:
float * m_rows[3] = { m[0], m[1], m[2] };没有m[3]

热点排行