gpt4 book ai didi

c - 在 C 中使用指针交换列

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:33 27 4
gpt4 key购买 nike

我真的被这个问题困住了,我的 C 代码使用多维数组工作得很好,但我需要使用指针做同样的事情,但我会先描述问题。

有了以下矩阵,我将得到一个数字,该数字将是排列数(将向右移动的列交换次数,最后一列将移动到第一列)。

例如

列的排列数:5

| 1 2 3 | -----> | 2 3 1 |

| 3 1 2 | -----> | 1 2 3 |

| 2 3 1 | -----> | 3 1 2 |

我使用指针编写了以下代码,如您所见,我使用多维数组构建矩阵并将其全部分配给指针:

short elementMatrix[3][3] = {{1, 2, 3},
{3, 1, 2},
{2, 3, 1}};
short *element_matrix;
element_matrix = *elementMatrix;

int counter = 1;
while (counter <= 5)
{
for (int i = 0; i < 3; i++)
{
int temp = elementMatrix[i][PR.elem_mat_size - 1];
*outElementMatrix = *outElementMatrix + i * PR.elem_mat_size + PR.elem_mat_size - 1;

for (int j = 3 - 1; j >= 0; j--)
{
*(outElementMatrix + i * PR.elem_mat_size + j) = *(outElementMatrix + i * PR.elem_mat_size + j - 1);

if (j == 0)
{
*(outElementMatrix + i * PR.elem_mat_size + j) = *outElementMatrix;
}
}
}
counter++;
}

最佳答案

由于您想要换出列,因此让指针代表列是有意义的。这样,您可以交换指针来交换列。因此,让我们有一个包含 3 个指向一列的指针的数组。

short* col[3];

每列由 3 个 short 组成,因此分配那么多内存。

for (int i = 0; i < 3; i++) {
col[i] = (short*)malloc(3 * sizeof(short));
}

现在初始化矩阵。这有点冗长,所以如果有人知道更好的方法,请编辑。 :)

col[0][0] = 1;  col[1][0] = 2;  col[2][0] = 3;
col[0][1] = 3; col[1][1] = 1; col[2][1] = 2;
col[0][2] = 2; col[1][2] = 3; col[2][2] = 1;

现在我们进行交换。请注意您如何需要一个临时变量,就像 Rishikesh Raje 建议的那样。另请注意,三次交换会将其恢复为原始状态,因此您只需交换 n % 3 次,而不是交换 n 次。当然,5 次或 2 次交换几乎是即时的,但如果你必须做十亿次,差异应该很明显。

for (int i = 0; i < 5; i++) {
short* temp = col[2];
col[2] = col[1];
col[1] = col[0];
col[0] = temp;
}

我们通过打印结果来保证结果是正确的:

for (int i = 0; i < 3; i++) {
printf("%d %d %d\n", col[0][i], col[1][i], col[2][i]);
}

关于c - 在 C 中使用指针交换列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52658807/

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