C 比较两个内存块之间的值是否相等

C 比较两个内存块之间的值是否相等,c,C,这是我实现kmean算法的一部分。我有两个大小相同的内存块,*cluster\u center是群集的当前中心,*new\u centroids表示取群集点平均值后的新质心: double *cluster_center = malloc((k * dim) * sizeof(double)); double *new_centroids = malloc((k * dim) * sizeof(double)); 我使用以下循环将结果从新的\u质心复制到群集\u中心,没有问题: for (i

这是我实现
kmean
算法的一部分。我有两个大小相同的内存块,
*cluster\u center
是群集的当前中心,
*new\u centroids
表示取群集点平均值后的新质心:

double *cluster_center = malloc((k * dim) * sizeof(double));
double *new_centroids = malloc((k * dim) * sizeof(double)); 
我使用以下循环将结果从
新的\u质心
复制到
群集\u中心
,没有问题:

for (int i = 0; i < k; ++i) {
    memcpy(&cluster_center[i * dim], &new_centroids[i * dim], dim * sizeof(double));
}
for(int i=0;i
事实上,我想知道C是否有一个内置函数来比较两个块的,因为我想在
*新质心
*簇中心
值相同时终止算法。我真的不知道怎么做


谢谢

您正在寻找的函数是
memcmp
(内存比较)。执行语句后,立即执行以下操作:

memcpy(destination, source, size);
然后


应返回零。

对于二进制比较,请研究
memcmp()。可能不足以比较
double
+0.0
-0.0
NaN
需要特殊处理。您的意思是喜欢吗?我的意思是比较两个数组的值,如果它们相似的话。我认为
memcmp
只比较长度,而不是实际值的相似性!!类似地,如果数组以相同的方式映射,则可以在不使用任何循环的情况下一次性地
memcpy
整个数组。(无需使用
memmove
,因为内存范围不能重叠。)
memcmp
只比较长度?不,您告诉
memcmp
大小是多少,它会比较每个字节的值。
memcmp(destination, source, size);