如何将 m 矩阵传递给 foo()?如果我不允许更改 foo() 的代码或原型?
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???);
}
如果您坚持上述声明foo
, i.e.
void foo(float **pm)
以及使用内置的二维数组,即
float m[4][4];
那么唯一的方法就是让你foo
与...一起工作m
是创建一个额外的“行索引”数组并传递它而不是m
...
float *m_rows[4] = { m[0], m[1], m[2], m[3] };
foo(m_rows);
没有办法通过m
to foo
直接地。是不可能的。参数类型float **
与参数类型完全不兼容float [4][4]
.
另外,从 C99 开始,上面的内容可以用更紧凑的方式表示为
foo((float *[]) { m[0], m[1], m[2], m[3] });
附:如果你仔细看,你会发现这与 Carl Norum 在他的回答中建议的基本上是一样的。除了卡尔是malloc
- 数组内存,这不是绝对必要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)