0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言中结构体能不能相加

学益得智能硬件 来源:学益得智能硬件 2023-12-19 17:04 次阅读

C语言中,结构体能不能相加?

这个问题乍一看好像很简单,但是仔细一想,好像又没这么干过。

写个代码试下:

#include 


struct Test
{
    int a;
    int b;
};


int main()
{
    struct Test t1; 
    struct Test t2; 


    t1 + t2; 


    return 0;
}

随便来个结构体,定义两个结构体变量,计算:
t1 + t2;


的值。
编译代码,很显然,报错了:
root@turbo:~# gcc 1.c -o 1
1.c: In function ‘main’:
1.c:14:12: error: invalid operands to binary + (have ‘struct Test’ and ‘struct Test’)
   14 |         t1 + t2;
      |            ^
root@turbo:~#


所以结论就是:

C语言中的结构体不支持相加的操作。

原因也很简单,编译器不知道相加的规则:到底是 a 跟 a 相加还是 a 跟 b 相加。

9f6160dc-9e4c-11ee-8b88-92fbcf53809c.png  

要解决这个问题,可能只有函数能行。
#include 


struct Test
{
    int a;
    int b;
};


struct Test func(struct Test t1, struct Test t2)
{
    struct Test t;
    t.a = t1.a + t2.a;
    t.b = t1.b + t2.b;


    return t;
}


int main()
{
    struct Test t1;
    struct Test t2;


    //t1 + t2;
    func(t1, t2);


    return 0;
}

定义一个函数,参数是两个结构体变量,函数体相当于是你指定的规则,返回的结果也是一个结构体。

不过这个问题要是放在C++里面,那就真的不算问题。

因为C++有专门的机制来解决它,运算符重载,本质也是写个函数。
Test operator+(Test t1, Test t2) 
{
    Test t;
    t.a = t1.a + t2.a;
    t.b = t1.b + t2.b;


    return t;
}
函数名就叫:operator+。

operator是C++里面的关键字,专门用来给运算符赋予第二个含义。

函数的参数和返回值都是相同类型的结构体,函数体跟我们刚才写的也一样。

唯一不一样的地方,就是调用函数的时候,既可以通过函数名的形式:
operator+(t1, t2);
也可以直接写成:
t1 + t2;
这种形式,看起来更加人性化。

编译的时候选择C++的编译器g++,可以顺利通过:
root@turbo:~# g++ test.cpp -o test
root@turbo:~#

当然了,我们在C++里面写代码,更多时候用的是class,成员变量给个私有属性,因为要在函数里面访问类的私有成员变量,所以把它声明成友元函数,这样看起来就顺眼的多。
class Test
{
private:
    int a;
    int b;
public:
    Test operator+(Test t)
    {   
        Test tmp;
        tmp.a = this->a + t.a;
        tmp.b = this->b + t.b;


        return tmp;
    }   
};
加法运算符不仅能重载友元函数,还能重载成成员函数。然后还会涉及构造函数、析构函数、this指针等等一大堆机制。所以,你觉得C语言和C++,哪个更复杂一些?

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128586
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61308
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48614
  • 结构体
    +关注

    关注

    1

    文章

    125

    浏览量

    10750

原文标题:结构体能不能相加?

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何在C语言中结构体定义为常量?

    结构体是只读的(不能改变结构体变量的值),此时,结构体的所有成员也是只读的不知道能不能用但是const不是绝对安全的大家发表一下意见啊~~应
    发表于 10-24 04:37

    能不能C语言中像操作寄存器那样直接操作一个字节的单独一位呢

    。但是这种方法有一个缺点,就是看起来不直观,比如0x5C要想知道每一位的状态还得换算一下,同时要操作某一个单独位时,还必须使用位操作运算,比如位与、位或、异或。   如果熟悉单片机的就会想到,能不能C
    发表于 02-25 06:13

    电池能不能修复?

    电池能不能修复? 电池修复作为一个新生事物,许多人对它不了解,也有许多人对它一知半解。那么电池到底能不能修复呢?
    发表于 11-23 10:40 987次阅读

    光耦(TLP521-4)能不能转换电压?

    光耦(TLP521-4)能不能转换电压?
    发表于 05-31 11:15 4138次阅读

    恒生电子总裁刘曙峰:一个特别重要的挑战就是能不能跟得上这个变化

    “金融科技行业的最大风险就是跟不上变化。新技术来了,技术变革了,你能不能跟得上?你能不能跟得上业务的变化?”
    的头像 发表于 08-26 17:27 3970次阅读

    新能源的车到底能不能买_新能源汽车的利与弊

     那么新能源汽车到底能不能买?内行人说出实情,后悔没有早知道
    的头像 发表于 07-30 09:59 3754次阅读

    谐波治理到底能不能节电

    谐波治理到底能不能节电?”这是我们做电能质量行业经常会被问到的一个问题。随着国家对节能减排项目的大力支持,有不少商业人士一拥而上加入到节能行业,想要分得节能市场的一杯羹。那么,通过谐波治理到底能不能实现节能的效果呢?
    发表于 04-23 15:50 2799次阅读

    大型辊压机轴磨损能不能现场维修?

    大型辊压机轴磨损能不能现场维修?
    发表于 06-23 15:35 1次下载

    指针能不能作为循环变量?

    指针能不能作为循环变量?
    的头像 发表于 02-16 18:11 699次阅读

    功耗分析能不能再提前亿点点?

    ‍ ‍     原文标题:功耗分析能不能再提前亿点点? 文章出处:【微信公众号:新思科技】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 04-13 22:50 246次阅读

    下周五|功耗分析能不能再提前亿点点?

    ‍ ‍     原文标题:下周五|功耗分析能不能再提前亿点点? 文章出处:【微信公众号:新思科技】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 04-14 18:35 270次阅读

    本周五|功耗分析能不能再提前亿点点?

    ‍ ‍     原文标题:本周五|功耗分析能不能再提前亿点点? 文章出处:【微信公众号:新思科技】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 04-17 21:55 238次阅读
    本周五|功耗分析<b class='flag-5'>能不能</b>再提前亿点点?

    周五开课|功耗分析能不能再提前亿点点?

    ‍ ‍     原文标题:周五开课|功耗分析能不能再提前亿点点? 文章出处:【微信公众号:新思科技】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 04-18 21:20 212次阅读
    周五开课|功耗分析<b class='flag-5'>能不能</b>再提前亿点点?

    物联网流量卡到底能不能用?

    物联网流量卡到底能不能用?
    的头像 发表于 08-28 09:40 3461次阅读
    物联网流量卡到底<b class='flag-5'>能不能</b>用?

    拼接屏能不能触屏操作?

    拼接屏能不能直接触屏操作,小编回答可以的,实际上很多客户购买拼接屏时都会提出拼接屏能不能加触摸的功能?我们回复是可以的,那是一种怎样的原理呢? 拼接屏一般是用来大屏展示,用来播放文字、图像等内容
    的头像 发表于 09-11 14:36 1104次阅读