我正在创建一组带有指向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]’
问题:
(*)[4]
和*[4]
有什么区别?
有更好的方法吗?
我最初尝试返回指向函数内部创建的数组的指针 但这引发了另一个编译器错误,因为它超出了范围。 我还想避免在函数内为数组分配空间 这很难控制。
答案 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;
}
}