【发布时间】:2021-05-10 00:42:12
【问题描述】:
我写了以下函数:
void negate_row(const int n, const int r, int *a)
{
if (r == 0)
{
printf("Matrix with negated row: ");
printf("\n");
for (int y = 0; y < 3; y++)
{
*(a + 3 * r + y) = *(a + 3 * r + y) *(-1);
printf("%d ", *(a + 3 * r + y));
}
printf("\n");
for (int y = 0; y < 3; y++)
{
*(a + 3 * r + y) = *(a + 3 * r + y) *(-1);
printf("%d ", *(a + 3 * (r + 1) + y));
}
printf("\n");
for (int y = 0; y < 3; y++)
{
*(a + 3 * r + y) = *(a + 3 * r + y) *(-1);
printf("%d ", *(a + 3 * (r + 2) + y));
}
printf("\n");
}
所以基本上这里发生的是我的函数接受一个 n X 3 矩阵并使用指针算术否定特定行。我已经能够做到这一点,我还能够弄清楚如何用否定行打印相同的矩阵。这只是我这样做的方式根本没有效率。我必须为每一行编写一个 if 语句,例如 if r == 0,1,2,3,4 等...有什么办法可以更有效地做到这一点?
一些说明:const int n 决定矩阵的大小 (n x 3),const int r 决定取反的行 (0 r n)。
【问题讨论】:
标签: c multidimensional-array printf pointer-arithmetic function-definition