gpt4 book ai didi

c - 通过指针参数进行二维数组操作

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:39 25 4
gpt4 key购买 nike

我正在创建一组函数,这些函数接受一个指向二维数组的指针并用一些数据填充数组

这就是我现在得到它的方式:

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. 有更好的方法吗?

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

最佳答案

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

[] 声明说明符具有更高的优先级,因此 float *arr[4] 声明了一个包含 4 个指向 float 的指针的数组,而 float (*arr)[4] 声明了一个指向 array-of-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;
}
}

关于c - 通过指针参数进行二维数组操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15624744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com