数组的存储大小不是恒定的

时间:2019-11-09 21:26:34

标签: c arrays

我是c的新手。我正在写一个专用于矩阵的.h文件。我想在.h文件中编写一个返回矩阵(数组)的函数(在c中不可能),因此真正的返回值是指向局部数组变量的指针。但是我不能在主函数中使用局部指针,因此我将int matrix [] []更改为静态int matrix [] []。现在的问题是:用户插入行/列的数量N,但是静态数组只能采用恒定的尺寸。帮助

这是.h

int N;
int i;
int j;

int *get_matrix(){
  int user_input;

  printf("set the dimension NxN of your matrix >> N=");
  scanf("%d",&N );

  static int temp_matrix[N][N];
  for(i=0;i<N;i++){
    for(j=0;j<N;j++){
      printf("insert the matrix[%d][%d] value\n",i,j );
      scanf("%d",&user_input);
      temp_matrix[i][j]=user_input;
    }
  }

  return temp_matrix;
}


void print_matrix(int *matrix){
  for(i=0;i<sizeof(matrix)/4;i++){
    for(j=0;j<sizeof(matrix)/4;j++){
      printf("%7d",matrix[i][j]);
  printf("\n");
    }
  }
}

这是main.c文件

#include <stdio.h>
#include "matrix_math.h"

void main(void){
  int i;
  int j;


  int *p1 = get_matrix();
  int matrix1[N][N];
  for(i=0;i<N;i++){
    for(j=0;j<N;j++){
      matrix1[i][j]=p[i][j];
    }
  }

  print_matrix(matrix1);
}

1 个答案:

答案 0 :(得分:0)

如果这只是学校的作业,并且不允许{/ {1}},并且假设将代码限制为某个合理的上限N是可以接受的,请考虑将矩阵定义为结构

malloc

然后您可以传递“矩阵”。不用说,最好通过#define MAXN 20 struct matrix { int n ; int data[MAXN][MAXN] ; } // matrix.c struct matrix get_matrix() { ... ; return m } ; void print_matrix(struct m *mp) { for (int i = 0 ; i<mp->n ; i++) { ... } ; } ; 来提高性能。如果需要,您还可以使函数返回matrix *