2013-03-25 84 views
2

我创建了一组功能,它需要一个指向二维数组 并填写了一些数据阵列二维数组操作

这是我得到了它现在:

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

What is the difference between (*)[4] and *[4] ?

[]声明说明具有较高的优先级,所以float *arr[4]声明的4个指针-TO- float阵列,而float (*arr)[4]声明一个指针到阵列的-4- float

Is there a better way to do this?

只是让阵列衰变成一个指针和使用分配:

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

注意,这是完全一样的,宣布'空隙m4identity(浮子(* M)[4])' – newacct 2013-03-25 23:15:52