gpt4 book ai didi

C 交换二维数组中的元素

转载 作者:行者123 更新时间:2023-11-30 15:12:23 24 4
gpt4 key购买 nike

我用 C 语言编写了交换函数。

void swapping(int dim, int size, void *n1, void *n2) {
int s = dim * size;
char a[s];
memcpy(a, n2, s);
memcpy(n2, n1, s);
memcpy(n1, a, s);
}

我可以说:

double t[10][3];
// write some value to array

当我交换两个元素时:

swapping(3, sizeof(double), &t[1], &t[2]);

printf他们在控制台上。我并不是在每个地方都得到了正确的值。例如:与

t[1][3] = { 123.0000, 324.1231, 923.9992};

我得到了:

123.0000120, 324.1231029, 923.999350

问题出在哪里?

附注我用过void *因为我想在不同类型中使用这个函数。

最佳答案

一些事先的想法

首先,您不能将 so 值分配给数组,这仅在初始化它们时才起作用。所以,

t[1][3] = { 123.0000, 324.1231, 923.9992};

编译错误。您必须将它们一一分配(例如在循环中)

t[1][0] = 123.0000;
t[1][1] = 324.1231;
t[1][2] = 923.9992;

您的问题

这是一个linkideone 编译器,以便您可以观察到不同的最终结果。基本上,它打印:

t2: 123.000000
t2: 324.123100
t2: 923.999200

由于操作系统管理可用空间的方式,逗号后的最后两个数字很糟糕。它实际上并没有删除或真正释放它,它只是将其标记为免费可写,因为这样效率更高(不不必要的操作),易于实现(链表),最后,它无需额外的磁盘写入即可实现文件恢复。

这就是为什么您得到的结果很可能与 00 不同。这也来自 C 中 float / double 的默认表示。

For a, A, e, E, f and F specifiers: this is the number of digits to be printed after the decimal point (by default, this is 6).

解决方案

将精度限制为逗号后的前 4 位数字

printf("t2: %.4f\n", t[2][i]);

关于C 交换二维数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35100988/

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