我正在尝试获取整数数据并将其存储到维数组中,但我无法做到这一点。请有人帮助我..
我尝试使用*(*(arr+i) + j)
,其中arr是指向二维数组的指针,i
和j
是循环变量,
我收到错误
error: invalid type argument of unary '*' (have 'int') scanf("%d", ((arr+i) + j));
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
int n,*arr,i,j,k;
scanf("%d",&n);
arr = malloc(n*n*sizeof(int));
memset(arr,0,n*n*sizeof(int));
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d", *(*(arr+i) + j));
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d ", *(*(arr+i) + j);
}
printf("\n");
}
}
我的输入是:
3
11 2 4
4 5 6
10 8 -12
最佳答案
int* arr
... arr = malloc(n*n*sizeof(int));
给你一个“损坏的”2D 数组 - 它实际上是一个 1D大批。这意味着您必须以 arr[i*n + j]
方式访问它。
不过,损坏的数组基本上已经成为过去。使用现代标准 C,您可以将整个代码替换为:
int (*arr)[n] = malloc( sizeof(int[n][n]) );
...
for(size_t i=0; i<n; i++)
for(size_t j=0; j<n; j++)
scanf("%d", &arr[i][j]);
...
free(arr);
另请注意,如果您需要将整个数组初始化为零,最好使用 calloc
,因为它就是这样做的。
关于c - 如何在 C 中使用指针获取多维数组的输入并打印数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57358463/