【问题标题】:How to pass a double array to a function in C?如何将双数组传递给C中的函数?
【发布时间】:2011-03-14 08:17:36
【问题描述】:

我整天都在努力解决这个问题:

如何将双精度数组传递给函数?

这是一个例子:

int matrix[5][2] = { {1,2}, {3,4}, {5,6}, {7,8}, {9,10} };

我希望将这个矩阵传递给名为eval_matrix的函数,

void eval_matrix(int ?) {
    ...
}

我不知道应该用什么代替?

谁能帮我解决这个问题?

我知道数组可以作为指针传递,但是双数组(或三数组?)呢?

谢谢,博达·赛多。

【问题讨论】:

标签: c arrays pointers multidimensional-array


【解决方案1】:

要用作数组,编译器必须知道数组的内部跨度,所以它是:

void eval_matrix( int m[5][2] ) { ...

或:

void eval_matrix( int m[][2], size_t od ) { ... /* od is the outer dimension */

或者只是:

void eval_matrix( int* p, size_t od, size_t id ) { ... /* ditto */

在任何情况下,它都是语法糖——数组被衰减为一个指针。

在前两种情况下,您可以像往常一样引用数组元素m[i][j],但在第三种情况下必须手动偏移为p[i*id + j]

【讨论】:

【解决方案2】:

你不应该传递整个矩阵,而应该传递指针,但是,你也应该传递大小......这就是我的做法,假设它总是对 [2]。

struct pair {
   int a, b;
};

struct pair matrix[] = { {1,2}, {3,4}, {5,6}, {7,8}, {9,10} };

void eval_matrix(struct pair *matrix, size_t matrix_size) {
  ...
}

eval_matrix(matrix, sizeof(matrix) / sizeof(struct pair);

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 2013-02-26
    • 2013-10-06
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2018-11-14
    • 2012-07-25
    • 2011-11-08
    相关资源
    最近更新 更多