【问题标题】:Matrix that makes use of an struct使用结构的矩阵
【发布时间】:2017-06-16 12:57:33
【问题描述】:

我有一个矩阵和一个带有 2 个int 变量的struct

struct virus {
int gen;
int neighbours;
}

我想用1 值初始化我的完整gen 矩阵。问题是它不适用于矩阵的第一列。 我将在代码下方发布。 此外,当我尝试将矩阵设置为virus struct 时,它不起作用,我不得不初始化一个名为b 的新矩阵。 这只是一个简单的初始化和打印。

    #include <stdio.h>

struct virus {
    int gen;
    int neighbours;
    };

void initGen(int n, int a[][100])
{
    struct virus b[n][100];

    int i,j;
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
            {
              b[i][j].gen = 1;
            }
    }
}

void printMatrixGen(int n, int b[][100])
{
    struct virus a[n][100];

    int i;
    for(i = 0; i < n; i++)
    {
        int j;
        for(j = 0; j < n; j++)
            printf("%d\t", a[i][j].gen);
        printf("\n");
    }
}

int main(void)
{
    int a[100][100], n;
    n = 4;
    initGen(n,a);
    printMatrixGen(n,a);
    return 0;
}

输出是矩阵

0    1    1   1
0    1    1   1
0    1    1   1
0    1    1   1

代替

1    1    1   1
1    1    1   1
1    1    1   1
1    1    1   1

【问题讨论】:

  • 为什么要传递一个数组作为参数,忽略它然后初始化一个本地数组呢?此代码没有任何意义,这就是您出错的原因。
  • 顺便说一句:它不起作用不是问题描述。您需要告诉我们实际发生的情况以及您期望发生的情况。
  • 我刚刚编辑了代码并添加了程序给我的输出和它应该的输出。
  • 我必须将矩阵作为参数传递,因为我不能使用任何全局变量。
  • printMatrixGeninitGen 这两个函数中,您只使用本地数组。

标签: c arrays matrix struct declaration


【解决方案1】:

您的代码传递了错误的数组。您需要按如下方式更改函数签名:

void initGen(int n, struct virus a[][100]);
void printMatrixGen(int n, struct virus a[][100]);

之后,删除struct virus b数组的本地声明,并使用structs作为参数传递。

最后,在main 中声明您的struct 数组,并将其传递给两个函数:

struct virus a[100][100];
int n = 4;
initGen(n, a);
printMatrixGen(n, a);

【讨论】:

  • 帮助很大!谢谢!多亏了你,现在我明白了我应该如何使用结构。
  • 这个表达式:struct virus a[100][100], n = 4; 不正确,因为它声明变量 'n' 是一个 'struct virus' 的实例 建议将该表达式移动到类似于:int n = 4;
  • @user3629249 非常感谢!
猜你喜欢
  • 2011-06-11
  • 2023-03-11
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
相关资源
最近更新 更多