新手求教: ** 和 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]