通过指针参数进行2D数组操作

时间:2013-03-25 21:05:33

标签: c arrays function pointers

我正在创建一组带有指向2D数组的指针的函数 并使用一些数据填充数组

这就是我现在的方式:

17 void m4identity(float *m[4][4]) {
18    *m = (float[4][4]) { { 1, 0, 0, 0 },
19                         { 0, 1, 0, 0 },
20                         { 0, 0, 1, 0 },
21                         { 0, 0, 0, 1 } };
22 }

但遗憾的是我收到了编译错误:

linalg.c:18:7: error: incompatible types when assigning to type ‘float *[4]’ from type ‘float (*)[4]’

问题:

  1. (*)[4]*[4]有什么区别?

  2. 有更好的方法吗?

    我最初尝试返回指向函数内部创建的数组的指针 但这引发了另一个编译器错误,因为它超出了范围。 我还想避免在函数内为数组分配空间 这很难控制。

1 个答案:

答案 0 :(得分:1)

  

(*)[4]*[4]之间的区别是什么?

[]声明说明符具有更高的优先级,因此float *arr[4]声明一个包含4个指针到float的数组,而float (*arr)[4]声明指向数组的指针 - 的-4 - float

  

有更好的方法吗?

让数组衰减成指针并使用赋值:

void m4identity(float m[4][4])
{
    memset(m, 0, 4 * sizeof(m[0]));
    for (int i = 0; i < 4; i++) {
        m[i][i] = 1;
    }
}