【问题标题】:Creating a matrix with runtime dimentions as input创建一个以运行时维度作为输入的矩阵
【发布时间】:2016-01-30 16:57:23
【问题描述】:

我写了两个鳕鱼。一个有效,另一个无效。请解释此代码棒的工作原理,为什么后者不起作用。

工作-

    #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]);

【问题讨论】:

    标签: c matrix runtime


    【解决方案1】:

    对于第二个示例,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]);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-26
      • 1970-01-01
      • 2019-10-03
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      相关资源
      最近更新 更多