我必须用整数元素检查两个数组(1-D)的相等。
我知道没有直接比较的方法。所以我在做基本的迭代,检查每个元素是否相等。
for ( int i = 0 ; i < len ; i++) {
// Equality check在C中测试数组的相等性最有效的方法是什么?我能摆脱循环吗(为了..)不知何故?
发布于 2015-12-28 04:37:42
使用memcmp函数比较两个等长数组。
int a = memcmp(arr1, arr2, sizeof(arr1));
if(!a)
printf("Arrays are equal\n");
else
printf("Arrays are not equal\n");发布于 2015-12-28 05:25:48
正如其他人所说,使用memcmp()是有效的。
假设实际的数组,一个一般的答案是
int is_equal = sizeof(array1) == sizeof(array2) && !memcmp(array1, array2, sizeof(array1));如果数组作为指针参数提供给函数,则大小信息将丢失,需要单独提供。
int IsEqual(void *array1, void *array2, size_t size1, size_t size2)
{
return size1 == size2 && !memcmp(array1, array2, size1);
}
int main()
{
int arr1[] = { /* whatever */ };
int arr2[] = { /* whatever */ };
is_equal = IsEqual(arr1, arr2, sizeof(arr1), sizeof(arr2));
return 0;
}或者,在转换为int指针之前尽可能晚地保存类型信息(即使用void数组的知识),并处理元素的数量。
int IsEqual2(int array1[], int array2[], size_t n1, size_t n2)
{
/* n1 and n2 are number of ints in array1 and array2 respectively */
return n1 == n2 && !memcmp(array1, array2, n1 * sizeof(int));
}
int main()
{
int arr1[] = { /* whatever */ };
int arr2[] = { /* whatever */ };
is_equal = IsEqual2(arr1, arr2, sizeof(arr1)/sizeof(*arr1), sizeof(arr2)/sizeof(*arr2));
return 0;
}发布于 2015-12-28 04:40:39
您可以使用请参阅 for循环方法
否则,memcmp也是比较数组的一种有效方法。参考模模
int memcmp(const void *s1,const void *s2,size_t n);
您可以将第一个n字节与此函数进行比较。
int array1[5],array2[5];
int x = memcmp(array1, array2, sizeof(array1));如果数组大小不同,那么:
memcmp?回答也是如此。记住,只有当内存元素或数组大小相等时, memcmp才有用。
https://stackoverflow.com/questions/34487743
复制相似问题