【发布时间】:2021-01-27 13:33:40
【问题描述】:
我已搜索但找不到合适的解决方案。 该代码通过将数组的大小作为参数在函数中生成二维数组。 现在在 main() 函数中,我希望打印数组。但是输出不正确。 这就是我目前所得到的。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int * generate(int size){
int i, j;
// allocate memory
static int **X = (int **)malloc(size * sizeof(int *));
for(i=0; i<size;i++)
X[i]=(int *)malloc(size * sizeof(int));
for(i=0; i<size;i++)
for(j=0;j<size;j++)
X[i][j]=rand()%1000;
return *X;
}
int main(){
srand(time(NULL));
int size=3;
int *p=generate(size);
for(int i=0; i<size; i++){
for(int j=0; j<size;j++){
printf("%5d ",(*(p+i)+j));
}
printf("\n");
}
return 0;
}
【问题讨论】:
-
你没有有一个二维数组。您有一个指向其他一维数组的指针的一维数组,它们不连续。
-
如果我删除
static: ideone.com/P7qU4o 对我有用 -
那么这里可以做些什么改变,这样如果我得到位置 A[0][0],就可以使用 *(*(p+i)+j) 打印元素
-
请解释“输出不正确”。究竟是什么不正确?显示实际输出,并显示预期输出。
-
例如示例输出:[20 21 22] [10 11 12] [30 31 32] 所以下一列中的值只是增加了 1