数组的平等性c

时间:2015-12-28 04:36:29

标签: c arrays

我必须检查两个数组(1-D)与整数元素的相等性。

据我所知,没有直接的比较方式。所以我正在进行基本的迭代并检查每个元素的相等性。

 for ( int i = 0 ; i < len ; i++) {
    // Equality check

在C中测试数组相等性的最有效方法是什么?我可以以某种方式逃脱循环(为......)吗?

3 个答案:

答案 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),它返回负值。
  • sizeof(array1)大于sizeof(array2),它返回正值。
  • sizeof(array1)等于sizeof(array2),它返回零。

    如何使用memcmpAnswer也在SO上。

REMEMBER memcmp仅在内存元素或数组大小相等时才有用