首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中数组的相等性

C中数组的相等性
EN

Stack Overflow用户
提问于 2015-12-28 04:36:29
回答 3查看 1.6K关注 0票数 4

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

我知道没有直接比较的方法。所以我在做基本的迭代,检查每个元素是否相等。

代码语言:javascript
复制
 for ( int i = 0 ; i < len ; i++) {
    // Equality check

在C中测试数组的相等性最有效的方法是什么?我能摆脱循环吗(为了..)不知何故?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-28 04:37:42

使用memcmp函数比较两个等长数组。

代码语言:javascript
复制
int a = memcmp(arr1, arr2, sizeof(arr1));
if(!a)
    printf("Arrays are equal\n");
else
    printf("Arrays are not equal\n");
票数 5
EN

Stack Overflow用户

发布于 2015-12-28 05:25:48

正如其他人所说,使用memcmp()是有效的。

假设实际的数组,一个一般的答案是

代码语言:javascript
复制
int is_equal = sizeof(array1) == sizeof(array2) && !memcmp(array1, array2, sizeof(array1));

如果数组作为指针参数提供给函数,则大小信息将丢失,需要单独提供。

代码语言:javascript
复制
 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数组的知识),并处理元素的数量。

代码语言:javascript
复制
 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
EN

Stack Overflow用户

发布于 2015-12-28 04:40:39

您可以使用请参阅 for循环方法

否则,memcmp也是比较数组的一种有效方法。参考模模

int memcmp(const void *s1,const void *s2,size_t n);

您可以将第一个n字节与此函数进行比较。

代码语言:javascript
复制
int array1[5],array2[5]; 
int x = memcmp(array1, array2, sizeof(array1));

如果数组大小不同,那么:

  • Array1小于array2,它返回负值。
  • Array1大于array2,它返回正值。
  • Array1等于array2,它返回零。 如何使用memcmp回答也是如此。

记住,只有当内存元素或数组大小相等时, memcmp才有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34487743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档