gpt4 book ai didi

c - 矩阵作为C中的双指针,如何移动它

转载 作者:行者123 更新时间:2023-11-30 18:50:22 25 4
gpt4 key购买 nike

我有一个如下所示的函数:

int matrix(int **A, int rows, int coloums) {}

如何在这样的矩阵中移动?

我习惯于将矩阵作为二维数组来使用,并且有两个索引(例如 i,j)和两个 for 循环来移动。

但是我不确定如何使用双指针,尽管我知道它们基本上指向内存中的某个位置。

最佳答案

通常,您会像任何二维数组一样对其进行索引:A[i][j]

数组下标是根据指针算术定义的。表达式 a[i] 的计算结果为 *(a + i) - 也就是说,给定地址 a,偏移量 i 元素(不是字节)来自该地址1并取消引用结果。

数组不是指针,但数组表达式在大多数情况下会转换(“衰减”)为指针表达式2。当编译器看到像 a[i] 这样的表达式时,它会首先将 表达式 a 从类型“的 N 元素数组>int”到“指向 int 的指针”,然后对该指针值应用下标操作,因此 a[i] == *(a + i).

这意味着您还可以对已经是指针的事物使用下标运算符:

int a[N];
int *p = a;
...
p[i] = some_value();

它的计算方式完全相同 - *(p + i)。唯一的区别是不需要将 p 从数组类型转换为指针类型。

由于下标运算符取消引用指针,这意味着对于 T * 类型的任何表达式 a,表达式 a[i]类型为 T。将其应用到您的代码中:

Expression            Type
---------- ----
A int **
A[i] int *
A[i][j] int

这一切都假设 A 被分配为指向指针序列的指针:

int **A = malloc( sizeof *A * rows );
if ( A )
{
for ( size_t i = 0; i < rows; i++ )
{
A[i] = malloc( sizeof *A[i] * cols );
}
}

<小时/>

  1. 指针算术考虑了所指向对象的类型。给定一个指针 T *p;,表达式 p + i 给出第 ith p 后面的 T 类型的 >object
  2. 除非数组表达式是 sizeof 或一元 & 运算符的操作数,或者是用于在声明中初始化另一个数组的字符串文字。

关于c - 矩阵作为C中的双指针,如何移动它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40287887/

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