我写过两种鳕鱼。一个工作,而另一个不工作。请解释这段代码的工作原理,为什么后者不起作用。
工作 -
#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]);
答案 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]);
}
}