gpt4 book ai didi

c - 将动态二维数组传递给函数

转载 作者:行者123 更新时间:2023-12-04 09:22:50 24 4
gpt4 key购买 nike

我正在用 C 编写一个 n x n 矩阵乘法程序,其中 a[][] 和 b[][] 是输入,x[][] 是输出。 a、b 和 x 是 malloc'd,但我不确定如何正确地将指针传递给乘法函数。下面是我正在尝试做的事情的概述

    void multiplication(float a, float b, float x, int n);

void main() {

float **a, **b, **x;
int n; // size of arrays (n x n)

multiplication(a, b, x, n);
}

void multiplication(float a, float b, float x, int n) {

// function

}

最佳答案

您需要 void multiplication(float *a, float *b, float *x, int n);。请注意,通常您应该使用 size_t 作为索引和数组大小,并将 double 作为您首选的浮点类型,除非您有特定的理由使用 float .

abx 中的每一个都指向连续的浮点值,您需要使用 a[n * x + y].

C99 在此基础上引入了各种有趣的优化可能性,所有这些在我所知道的任何编译器中几乎都不能依赖:

有了这些,这样的事情应该是可能的:

void multiplication(size_t len; // <- semicolon not a mistake
double a[len][restrict const len],
double b[len][restrict const len],
double c[len][restrict const len]);

这种迂腐的构造会向编译器表明数组的长度是相同的,它们是二维的,并且大小由运行时的调用代码指示。此外,所有数组都是可缓存的,因为它们不能 alias一个个。

只能梦想 C 继续进步,C99 仍未得到完全支持,许多 other improvements还没有成为主流。

关于c - 将动态二维数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5711268/

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