【问题标题】:How can I define typedef matrix in ansi c如何在 ansi c 中定义 typedef 矩阵
【发布时间】:2015-04-11 15:25:22
【问题描述】:

我有 2 个 .c 文件,adj.c 和 main.c。 我尝试做的是在 adj.c 中定义

#define N 12
typedef int adj_mat[N]

并在 main.c 中将此 typedef 用作二维数组 我试着这样定义,

adj_mat mat[N];

我的程序中有一个函数用零填充这个矩阵,定义如下:

void fill_mat_zero(adj_mat);

我的问题是,如果我用 Visual Studio 运行这个程序就没有问题, 但是如果我尝试在 Ubuntu 中编译它,它会显示一个错误,如下所示: 注意:预期为“int ”,但参数类型为“int ()[12]”

这里有什么问题? typedef 的定义不正确? 有没有办法将一个adn_mat[N] 数组定义为typedef,然后将其用作多维数组?

谢谢。

【问题讨论】:

  • #definetypedef 应该在 adj.h 中吗?

标签: c multidimensional-array typedef


【解决方案1】:

从问题中不清楚您是否想要一个一维数组,例如,您将索引它就好像它是一个二维一样

adj_mat[3*row + col]

在这种情况下,您的声明只是部分作出。这编译得很干净,我从您的声明中删除了[N],并在函数参数中添加了一个标识符。

#define N 12
typedef int adj_mat[N];

void fill_mat_zero(adj_mat m) {
    int i;
    for (i=0; i<N; i++)
        m[i] = 0;
}

int main(void){
    adj_mat mat;
    fill_mat_zero(mat);
    return 0;
}

或者,也许您想通过拥有adj_mat[] 的数组来使其成为二维。

#define N 12
typedef int adj_mat[N];

void fill_mat_zero(adj_mat *m, int size) {
    int i, j;
    for (i=0; i<N; i++)
        for (j=0; j<size; j++)
            m[i][j] = 0;
}

int main(void){
    adj_mat mat[N];
    fill_mat_zero(mat, N);
    return 0;
}

但如果你想用0 填充数组,使用memset() 会更有效。

【讨论】:

    【解决方案2】:

    这个

    #define N 12
    typedef int adj_mat[N]
    

    adj_mat 定义为int 类型的12 元素数组。

    这个

    adj_mat mat[N];
    

    mat 定义为adj_mat 类型的12 元素数组,这意味着mat 实际上是int[12][12]。所以你得到了错误。

    void fill_mat_zero(adj_mat);
    

    是一个声明,而不是一个定义。定义有一段代码。当您进入某个国家/地区时,您可以将申报单视为海关申报单 - 您声明您拥有某样东西,但声明实际上并不是那个东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 2018-02-15
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多