gpt4 book ai didi

c - 不使用方括号旋转矩阵 "[ ]"

转载 作者:行者123 更新时间:2023-11-30 20:09:18 29 4
gpt4 key购买 nike

我需要旋转矩阵并调用函数而不使用[],我什至想不出解决方案。

void _90DegClockwise(int *pS, int row, int col) {
for (int i = 0; i < row; ++i)
{
for (int j = i + 1; j < col; j++) {
int temp;
temp = (int)(pS);
*((int*)((pS + i) + j)) = (int*)((pS + j) + i);
(int*)((pS + j) + i) = temp;
}
}
}

我不知道如何将值插入矩阵或如何交换

最佳答案

要解决这个问题,您需要了解数组在 C 中的工作原理。

假设您有一个 3 * 3 矩阵,其声明如下:

int matrix[3][3];

当你想象这是一个像这样的正方形时:

+---+---+---+
| 0 | 1 | 2 |
+---+---+---+
| 3 | 4 | 5 |
+---+---+---+
| 6 | 7 | 8 |
+---+---+---+

对于计算机来说,它是内存中的连续“行”,如下所示:

+---+---+---+---+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
+---+---+---+---+---+---+---+---+---+---+
^
|____matrix

变量matrix保存第一个单元格的地址

因此,如果您想在不使用 [] 运算符的情况下访问任何单元格,则需要计算该单元格的地址。

让我们对中间的单元格执行此操作:

matrix[1][1];

这是第二行的第二个单元格,因此您需要将第一行的宽度添加到矩阵的开头,然后从第二行的开头再添加一个单元格。并且您想要取消引用地址以获取值,如下所示:

*(matrix + (3 * 1) + 1);

如果我们想要第三行的中间单元格怎么办?同样的事情,但添加两行的宽度:

*(matrix + (3 * 2) + 1);

总结一下:如果你想访问矩阵第 y 行中的单元格 x,你可以这样计算它的地址:

*(matrix + (with * y) + x);

关于c - 不使用方括号旋转矩阵 "[ ]",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53238553/

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