在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    7604

    瀏覽量

    136813
  • 函數
    +關注

    關注

    3

    文章

    4331

    瀏覽量

    62610
  • C++
    C++
    +關注

    關注

    22

    文章

    2108

    瀏覽量

    73646
  • 編譯器
    +關注

    關注

    1

    文章

    1634

    瀏覽量

    49129
  • 結構體
    +關注

    關注

    1

    文章

    130

    瀏覽量

    10841

原文標題:結構體能不能相加?

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言中for循環的用法和應用 C語言中for循環與while循環的區別

    C語言中的循環結構時,for循環是最常用的一種。它允許重復執行一段代碼,直到滿足特定條件為止。
    發表于 08-18 16:33 ?3254次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環的用法和應用 <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環與while循環的區別

    C語言中數組和結構體的內存表示和布局

    C語言中,數組和結構體都可以代表一塊內存,但為什么結構體可以直接賦值,而數組不可以?這個問題涉及到C語言
    發表于 08-28 10:54 ?1610次閱讀

    編程語言中一個奇怪的代碼結構

    C語言C++等編程語言中,我們常常會遇到一個奇怪的代碼結構
    發表于 11-01 10:24 ?442次閱讀
    編程<b class='flag-5'>語言中</b>一個奇怪的代碼<b class='flag-5'>結構</b>

    能不能C語言中像操作寄存器那樣直接操作一個字節的單獨一位呢

    。但是這種方法有一個缺點,就是看起來不直觀,比如0x5C要想知道每一位的狀態還得換算一下,同時要操作某一個單獨位時,還必須使用位操作運算,比如位與、位或、異或。?? 如果熟悉單片機的就會想到,能不能C
    發表于 02-25 06:13

    電池能不能修復?

    電池能不能修復? 電池修復作為一個新生事物,許多人對它不了解,也有許多人對它一知半解。那么電池到底能不能修復呢?
    發表于 11-23 10:40 ?1095次閱讀

    光耦(TLP521-4)能不能轉換電壓?

    光耦(TLP521-4)能不能轉換電壓?
    發表于 05-31 11:15 ?4291次閱讀

    諧波治理到底能不能節電

    諧波治理到底能不能節電?”這是我們做電能質量行業經常會被問到的一個問題。隨著國家對節能減排項目的大力支持,有不少商業人士一擁而上加入到節能行業,想要分得節能市場的一杯羹。那么,通過諧波治理到底能不能實現節能的效果呢?
    發表于 04-23 15:50 ?3573次閱讀

    大型輥壓機軸磨損能不能現場維修?

    大型輥壓機軸磨損能不能現場維修?
    發表于 06-23 15:35 ?1次下載

    指針能不能作為循環變量?

    指針能不能作為循環變量?
    的頭像 發表于 02-16 18:11 ?1040次閱讀

    物聯網流量卡到底能不能用?

    物聯網流量卡到底能不能用?
    的頭像 發表于 08-28 09:40 ?6324次閱讀
    物聯網流量卡到底<b class='flag-5'>能不能</b>用?

    c語言中順序結構的基本流程

    的語句組成,這些語句用于完成特定的任務或操作。在C語言中,每個語句都以分號結束,多個語句可以用大括號括起來形成一個語句塊。在順序結構中,每個語句都依次執行,按照代碼的順序執行,然后才會執行下一條語句。 首先,我們
    的頭像 發表于 11-22 10:20 ?1024次閱讀

    C語言中,同一個函數能不能被定義兩次?

    稍微有點C語言基礎的同學,一定知道不能這樣做。
    的頭像 發表于 05-11 18:27 ?1710次閱讀

    使用C語言實現函數模板

      用C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?387次閱讀

    C語言中的頭文件能不能重復包含

    C語言中的頭文件能不能重復包含? 比如代碼寫成這樣,stdio.h 連續包含了兩次。 #include #include int main(){ printf("helloworld
    的頭像 發表于 11-26 17:19 ?161次閱讀

    C語言中申請的堆內存能不能自動釋放

    C語言中申請的堆內存能不能自動釋放?每次都要手動 free 太麻煩,也容易忘記。 學過 C++ 的同學,應該首先能想到智能指針。 但是這是C
    的頭像 發表于 11-27 09:33 ?115次閱讀
    主站蜘蛛池模板: 五月天婷婷色| 亚洲 自拍 欧美 综合| 深夜桃色影院| a一级黄| 国产成人啪午夜精品网站男同| 欧美在线天堂| 亚洲国产女人aaa毛片在线| 高清一区二区三区| 午夜爱爱小视频| 欧美一区福利| 激情五月综合网| ts人妖另类国产| 天堂在线资源网| 超黄视频在线观看| 亚洲视频三区| 亚洲第一看片| 欧美日韩一区二区视频图片| 狠狠色丁香婷婷综合小时婷婷| 在线观看视频高清视频| 免费的三及片| yy6080三级理论韩国日本| 精彩视频一区二区三区| 天堂bt在线种子网| 久久夜色精品国产飘飘| 亚洲精品久久久久午夜三| 国内黄色精品| 欧美午夜寂寞影院安卓列表| 五月天激情综合网| 精品三级在线观看| 天天综合天天色| 欧美性黑人极品hd网站| 中文字幕在线色| 日韩在线三级| 国产精品黄网站免费进入 | 一级色视频| 日本老师xxxxxxxxx79| 国产精品网址你懂的| 人人做人人干| 婷婷在线免费观看| 手机在线看片你懂得| 狠狠色丁香婷婷综合视频|