結(jié)構(gòu)體和聯(lián)合體的區(qū)別及說明
結(jié)構(gòu)體和聯(lián)合體的區(qū)別
1. 結(jié)構(gòu)體(Struct)
在 C 語(yǔ)言中,結(jié)構(gòu)體是一種自定義的復(fù)合數(shù)據(jù)類型,允許將不同數(shù)據(jù)類型的變量組合成一個(gè)單一的實(shí)體。結(jié)構(gòu)體可以包含多個(gè)成員,每個(gè)成員可以是不同的數(shù)據(jù)類型,如整數(shù)、浮點(diǎn)數(shù)、字符、數(shù)組等。
結(jié)構(gòu)體的定義通常在函數(shù)外部,并且在函數(shù)內(nèi)部可以聲明和使用結(jié)構(gòu)體類型的變量。結(jié)構(gòu)體的定義包含了結(jié)構(gòu)體的名稱和結(jié)構(gòu)體成員的列表,每個(gè)成員都有一個(gè)名稱和一個(gè)數(shù)據(jù)類型。結(jié)構(gòu)體的成員可以通過成員運(yùn)算符(.)來訪問。
以下是一個(gè)簡(jiǎn)單的 C語(yǔ)言 結(jié)構(gòu)體的示例:
#include <stdio.h> // 定義一個(gè)名為Student的結(jié)構(gòu)體 struct Student { int roll_no; // 學(xué)號(hào) char name[50]; // 姓名 int age; // 年齡 float score; // 分?jǐn)?shù) }; int main() { // 聲明并初始化一個(gè)Student類型的結(jié)構(gòu)體變量 struct Student student1 = {101, "Alice", 20, 95.5}; // 訪問結(jié)構(gòu)體成員并輸出 printf("Roll No: %d\n", student1.roll_no); printf("Name: %s\n", student1.name); printf("Age: %d\n", student1.age); printf("Score: %.2f\n", student1.score); return 0; }
2. 聯(lián)合體(Union)
在 C 語(yǔ)言中,聯(lián)合體是一種特殊的數(shù)據(jù)結(jié)構(gòu),可以在內(nèi)存中共享同一段存儲(chǔ)空間來存儲(chǔ)不同類型的數(shù)據(jù)。與結(jié)構(gòu)體類似,聯(lián)合體也是一種用戶自定義的數(shù)據(jù)類型,可以包含多個(gè)不同類型的成員變量。
聯(lián)合體的定義使用關(guān)鍵字‘union’,后面緊跟聯(lián)合體的名稱和一對(duì)花括號(hào),括號(hào)中定義了聯(lián)合體的成員變量,每個(gè)成員變量有自己的名稱和數(shù)據(jù)類型。
#include <stdio.h> // 定義一個(gè)聯(lián)合體 union Data { int i; float f; char c; }; int main() { union Data data; // 聲明一個(gè)聯(lián)合體變量data data.i = 42; // 給聯(lián)合體的整數(shù)成員賦值 printf("data.i = %d\n", data.i); // 輸出整數(shù)成員的值 data.f = 3.14; // 給聯(lián)合體的浮點(diǎn)數(shù)成員賦值 printf("data.f = %.2f\n", data.f); // 輸出浮點(diǎn)數(shù)成員的值 data.c = 'A'; // 給聯(lián)合體的字符成員賦值 printf("data.c = %c\n", data.c); // 輸出字符成員的值 // 注意:聯(lián)合體的不同成員共享同一塊內(nèi)存空間,賦值一個(gè)成員會(huì)影響其他成員的值 printf("data.i = %d, data.f = %.2f, data.c = %c\n", data.i,data.f, data.c); //data.i = 1078523201, data.f = 3.14, data.c = A return 0; }
3. 聯(lián)合體與結(jié)構(gòu)體的區(qū)別
結(jié)構(gòu)體 | 聯(lián)合體 | |
關(guān)鍵字 | struct | union |
成員 | 多個(gè)成員 | 多個(gè)成員 |
存放 | 每個(gè)成員都有自己的內(nèi)存空間 | 所有成員共用同一塊內(nèi)存空間 |
4. 實(shí)例分析
- 定義聯(lián)合體
- main.c
調(diào)試過程中,可以看到各個(gè)變量:
這說明聯(lián)合體所有成員都存儲(chǔ)在同一個(gè)空間中,每個(gè)成員不可能同時(shí)使用。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C#實(shí)現(xiàn)文件上傳下載Excel文檔示例代碼
這篇文章主要介紹了C#實(shí)現(xiàn)文件上傳下載Excel文檔示例代碼,需要的朋友可以參考下2017-08-08關(guān)于C#連接FTP時(shí)路徑問題的解決方法
最近在工作中遇到一個(gè)需求,需要利用C#連接FTP,在連接過程中遇到一個(gè)問題,所以下面這篇文章主要給大家介紹了關(guān)于C#連接FTP時(shí)路徑問題的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08C#中免費(fèi)密碼庫(kù)BouncyCastle的使用詳解
這篇文章主要來和大家分享一個(gè)C#版開源、免費(fèi)的Bouncy?Castle密碼庫(kù):BouncyCastle,文中介紹了BouncyCastle的具體使用,需要的可以參考下2024-03-03C#實(shí)現(xiàn)根據(jù)數(shù)字序號(hào)輸出星期幾的簡(jiǎn)單實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)根據(jù)數(shù)字序號(hào)輸出星期幾的簡(jiǎn)單實(shí)例,代碼簡(jiǎn)潔實(shí)用,也有助于初學(xué)者更好的理解C#的switch和if語(yǔ)句的流程控制,需要的朋友可以參考下2014-07-07C# 動(dòng)畫窗體(AnimateWindow)的小例子
C# 動(dòng)畫窗體(AnimateWindow)的小例子,需要的朋友可以參考一下2013-03-03