我必须检查两个数组(1-D)与整数元素的相等性。
据我所知,没有直接的比较方式。所以我正在进行基本的迭代并检查每个元素的相等性。
for ( int i = 0 ; i < len ; i++) {
// Equality check
在C中测试数组相等性的最有效方法是什么?我可以以某种方式逃脱循环(为......)吗?
答案 0 :(得分:5)
使用memcmp
函数比较两个长度相等的数组。
var success = await Windows.System.Launcher.LaunchUriAsync(new System.Uri("alsdkcs:MainPage?id="+5));
if (success){
// URI launched
}
else{
// URI launch failed
}
答案 1 :(得分:2)
正如其他人所说,使用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;
}
答案 2 :(得分:1)
您可以refer获取循环方法
否则memcmp
也是比较数组的有效方法。
请参阅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));
如果数组大小不同,则:
sizeof(array1)等于sizeof(array2),它返回零。
如何使用memcmp
? Answer也在SO上。
REMEMBER memcmp
仅在内存元素或数组大小相等时才有用