C-使用malloc创建一个数组,然后循环使用它



我现在正在学习C,并试图编写这个函数

int *create_matrix(int n) {
   int *matrix = malloc(n*n*sizeof(int));
   srand(time(NULL));
   int i, j;
   for (i = 0; i < n; i++) {
      for (j = 0; j < n; j++) {
        matrix[i][j] = rand()%10;
      }
   }
   return matrix;
}

为什么编译失败?其对CCD_ 1的抱怨不是指针/数组。但我刚刚声明它是一个指针,在上面六行。。。

这是一个1D数组,所以必须将其视为1D数组而不是2D数组。

当然,您仍然可以在其中存储n x n元素:

    matrix[i * n + j] = rand() % 10;

如果您愿意,可以按照"如何使用C中的动态多维数组?"中给出的建议来设置2D结构?

顺便说一下,您可能不希望每次创建矩阵时都调用srand()。如果你连续两次快速调用create_matrix(),你最终可能会得到相同的"随机"矩阵。在程序开始时,请致电srand()一次。

您已经将matrix声明为一维数组,而不是二维数组。所以像一样使用它

for(int i=0; i<n*n; ++i)
    matrix[i] = //whatever;

如果你真的需要二维阵列,你需要使用双pointers:

int **matrix = malloc(n * sizeof(int *));  // notice the double pointer
// ....
// ....
for (i = 0; i < n; i++)
{
    matrix[i] = malloc(sizeof(int) * n);
    // ....
}

您将matrix声明为一维数组。您需要将数据按原样存储在其中,即

matrix[i * n + j] = rand() % 10;

或者将其声明为二维数组并相应地分配内存。

    int** matrix = malloc(n * sizeof(int*));
    int i, j;
    for (i = 0; i < n; i++) {
        matrix[i] = malloc(n * sizeof(int));
        for (j = 0; j < n; j++) {
            matrix[i][j] = rand() % 10;
        }
    }

它真正抱怨的是,矩阵[i]不是指针/数组。你只创建了一个一维数组,你可以像一样直接访问它

matrix[i * n + j] = rand() % 10;

或者继续,干净地做,并重做数组,这样它将是二维的。您需要使用指向指针的指针(对于行中的每个成员-一行)

int **matrix

但是你必须通过

*matrix

对每一行进行malloc。

查找二维数组。

//EDIT:另外,将srand()移到文件的开头。您不希望对每个新矩阵都执行srand()。

如果想要两个维度,则需要一个指向指针的指针(而不是单个指针):

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int **create_matrix(int n)
{
   int **matrix = malloc(n * sizeof(int *));
   srand(time(NULL));
   int i, j;
   for (i = 0; i < n; i++) {
      matrix[i] = malloc(sizeof(int) * n);
      for (j = 0; j < n; j++) {
         matrix[i][j] = rand()%10;
      }
   }
   return matrix;
}
int main(void)
{    
    int **matrix = create_matrix(5);
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新