gpt4 book ai didi

c - 在 C 中使用指针访问二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 06:21:04 25 4
gpt4 key购买 nike

在我的主要我有

  int mat[ROW][COL];
int *p = &mat[0][0];
minput(p, ROW, COL);

我被困在如何进行 minput 上,因为我应该用设置的数字初始化二维数组,但我只是不明白我应该如何分配数字,

我知道指针中的 m[0][0] 是 *(*(m+0)+0),但它不允许我做类似 *( *(m+0)+0)=0;,

因为它给出了 invalid type argument of unary ‘*’ (have ‘int’) 错误。

所以基本上我只想知道如何使用指针将数字分配给二维数组,如果我们不必使用指针,那么使用 m[2][2]=5 就很容易了,但是我不知道如何使用指针执行此操作。

我的教授提供了 minput 函数的一行示例,它只是 *(m+0) = 8;,这对我来说没有意义,这不是我们想要的吗用于一维数组?如果那是这样做的方式,那是否意味着我应该做类似的事情

*(m+0) = 8;
*(m+1) = 1;
*(m+2) = 6;
*(m+3) = 3;
*(m+4) = 5;
*(m+5) = 7;
*(m+6) = 4;
*(m+7) = 9;
*(m+8) = 2;

对于 3x3 阵列?这对我来说似乎不对,如果有人可以帮助我解决这个问题,那就太好了,指针让我很困惑。

编辑:所以我看到显然正确的方法是我上面列出的方法*(*(m+0)+0) = val

但是当我在我的代码中这样做时,我得到了这个错误:

error: invalid type argument of unary ‘*’ (have ‘int’)
*(*(m+0)+2)=6;
^

为什么会这样?作业错了吗?

最佳答案

假设您将二维数组声明为 arr[rows][cols]。然后:

  • arr 指向第一个子数组
  • arr + 1 指向第二个子数组
  • *(*(arr+2)+3) 等同于arr[2][3]

因此,如果您想将 val 分配给第二行的第一个元素,例如:

*(*(mat+1) + 0) = val;

关于c - 在 C 中使用指针访问二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com