结构体比较

对于自定义数据类型,如何进行高效的比较?
这是在面试过程中碰到的一个编程细节。本文提供2中思路对结构体进行比较,显然方法二要更加高效。值得注意的是,在调用方法二时,必须提前对结构体中可能存在的内存缝隙进行填充。

感谢面试官们在面试中的指导,特别钦佩有涵养有风度的技术咖!

//结构体
struct myStruct
{
    char c;
    int a;
    short s[3];
};

//方法一:判断2个结构体是否相等
bool IsEqual(myStruct s1, myStruct s2)
{
    if (s1. c == s2.c && s1.a == s2.a && 
        s1.s[0] == s2.s[0] && s1.s[1] == s2.s[1] && s1.s[2] == s2.s[2])
        return true;
    else
        return false;
}

//方法二:通过memcmp()来比较2个结构体变量是否相等
//但这2个结构体变量必须在赋值前进行清零初始化(对内存缝隙进行填充)
bool IsEqual2(myStruct s1, myStruct s2)
{
    int val =  memcmp(&s1, &s2, sizeof(s1));
    if(val == 0)
        return true;
    else
        return false;
}

void StructTest()
{
    myStruct s1, s2;
    memset(&s1, 0, sizeof(s1));//结构体对象赋值前,应该初始化
    memset(&s2, 0, sizeof(s2));
    s1.c = 'a';
    s1.a = 1;
    s1.s[0] = 0;
    s1.s[1] = 1;
    s1.s[2] = 2;
    s2.c = 'a';
    s2.a = 1;
    s2.s[0] = 0;
    s2.s[1] = 1;
    s2.s[2] = 1;

    myStruct s3 = {'a', 10, {0, 1, 2}};//初始化结构体,但存在内存缝隙

    int len = sizeof(s1);

    bool flag1 = IsEqual(s1, s2);
    bool flag2 = IsEqual2(s1, s2);
}
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值