gpt4 book ai didi

c - 在 C 中处理多维数组的列

转载 作者:行者123 更新时间:2023-12-05 03:57:26 24 4
gpt4 key购买 nike

我想了解如何将二维数组的列设置为 0。

我遵循了 K.N. C 编程教科书中的这段代码片段。国王。

   int a[NUM_ROWS][NUM_COLS], (*p)[NUM_COLS], i;
...
for (p = &a[0]; p < &a[NUM_ROWS]; p++)
(*p)[i] = 0;


我真的不明白这是怎么回事。非常感谢任何澄清。

最佳答案

这都与数组在访问时如何转换为指针有关,请参阅:C11 Standard - 6.3.2.1 Other Operands - Lvalues, arrays, and function designators(p3) .

在您的情况下,您有一个 int a[NUM_ROWS][NUM_COLS]; 的二维数组。这实际上是 int[NUM_COLS] 数组的数组。 (一维数组的数组)。

当您访问a时,a被转换为指向第一个一维数组的指针,类型为int (*)[NUM_COLS](指向 NUM_COLS 整数数组的指针)。

您将 p 声明为指向 NUM_COLS 整数数组的指针,因此 pa 类型兼容>。您可以简单地初始化:

p = a;

(而不是 p = &a[0];)

在您的 for 循环中,您从 p = a; (指向第一个一维数组的指针)开始循环,并在 p 是小于 &a[NUM_ROWS](最后一维数组后的地址 1)递增 p 每次迭代(因为 p 是指向int[NUM_COLS], p 每次递增 p 时指向下一行)

当您取消引用 p 时,您有一个 int[NUM_COLS] 数组,因此当您处理 (*p)[i] = 0; 您正在将该行的第 ith 元素设置为 0

简而言之就是这样。如果您仍然感到困惑,请告诉我,我很乐意尝试进一步解释。

关于c - 在 C 中处理多维数组的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58497885/

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