创建一个以运行时维数为输入的矩阵

时间:2016-01-30 16:57:24

标签: c matrix runtime

我写过两种鳕鱼。一个工作,而另一个不工作。请解释这段代码的工作原理,为什么后者不起作用。

工作 -

    #include <stdio.h>
#include <malloc.h>

int main(){
  int m, n, i, j;
  scanf("%d%d",&m,&n);
  int *p;
  p = (int *) malloc(m*n*sizeof(int));
  for(i=0;i<m;i++){
    for(j=0;j<n;j++){
      scanf("%d", (p+i*n+j));
    }
  }
}

不工作 -

#include <stdio.h>
#include <malloc.h>

int main(){
  int m, n, i, j;
  scanf("%d%d",&m,&n);
  int *p;
  p = (int *) malloc(m*n*sizeof(int));
  for(i=0;i<m;i++){
    for(j=0;j<n;j++){
      scanf("%d", p[i][j]);
    }
  }
}
  

错误是 - 下标值既不是数组也不是指针,也不是矢量
  scanf(“%d”,p [i] [j]);

1 个答案:

答案 0 :(得分:0)

对于第二个例子,p需要是一个指向数组的指针,或指向指针的指针。

可能类似于

int **p = malloc(m * sizeof(int *));
for (size_t i = 0; i < m; ++i)
{
    p[i] = malloc(n * sizeof(int));
    for (size_t j = 0; j < n; ++j)
    {
        scanf("%d", &p[i][j]);
    }
}