c - 如何在 C 中使用指针获取多维数组的输入并打印数组?

标签 c arrays pointers multidimensional-array

我正在尝试获取整数数据并将其存储到维数组中,但我无法做到这一点。请有人帮助我..

我尝试使用*(*(arr+i) + j),其中arr是指向二维数组的指针,ij 是循环变量, 我收到错误

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/

相关文章:

javascript - 空数组的串联如何防止排序突变?

c++ - 在 C++ 中循环数组时访问结构属性

c++ - std::vector、std::move 和指针失效

c - 尝试使用结构变量时遇到麻烦

c - 使 : *** No rule to make target 'main.c' , 需要 'main.o' 。停止

c - 一行打印多个\t

c - 跳过 OpenGL 预编译 header

javascript - Javascript 数组是原始数组吗?字符串?物体?

C 代码 - 猜谜游戏 - 函数问题

c - 标记化数组 : signal SIGABRT error 上的 realloc()