C語言聯合和枚舉講解

目錄

?聯合體的大小

?聯合體如何省空間

巧用聯合體?

聯合判斷大小端(驚為天人,大佬寫的,我借鑒)?

?枚舉

枚舉類型的使用?


首先我們先看一下菜鳥教程中的對C語言聯合體的說明

?聯合體的大小

?

#include <stdio.h>
union u
{char c;int u;
};int main()
{union u n;printf("%zd\n", sizeof(n));return 0;;
}

?這里為什么是4呢?

?

?這里已經給了我們答案,為了更加直觀,我們取地址打印一下

?

#include <stdio.h>
union u
{char c;int u;
};int main()
{union u n;printf("%p\n", &n);printf("%p\n", &n.c);printf("%p\n", &n.u);return 0;;
}

?

所以聯合體也叫共用體

我們在這解釋一下聯合體大小應該怎樣計算

1.聯合體的大小至少是最大成員的大小。

2.當最大成員大小不是最大對齊數的整數倍的時候,就要對齊到最大對齊數的整數倍

上述的計算方法的第二點我們寫個代碼再解釋一下

#include <stdio.h>
union Un1
{char c[5];//5//注意此時如果是數組的話要按照數據所屬的類型大小來計算,char類型就是1//1  8  1int i;//4 8  4
};int main()
{printf("%zd\n", sizeof(union Un1));return 0;
}

?

?有了這樣代碼中的注釋我們或許就能理解結構體大大小是如何計算的。

?聯合體如何省空間

?

對于商品來說,他們具有相同的價格類型,產地信息,但有的商品具有的信息別的商品沒有,我們完全可以寫出一個結構體包含這這個他們的公共屬性和各自具有的屬性,但這樣的話太浪費空間了,比如說你此時就想描述一件商品,那你還需要再描述其他兩件不必要的特殊屬性了。

因此我們的解決辦法是現將公共屬性單獨寫出來,剩余屬于各個商品本身的特殊屬性我們就用聯合體聯合起來,這樣做的話,就節省了空間。

struct gift_list
{int stock_number;//庫存量double price;//定價int item_type;//商品類型union {struct{char title[20];//書名char author[20];//作者int num_pages;//頁數}book;struct{char design[30];//設計}mug;struct{char design[20];//設計int colors;//顏色int sizes;//尺寸}shirt;}item; 
};

這樣寫就很節省空間了。

巧用聯合體?

?我們來看一個比較厲害的代碼:(一個int類型,一次取出一個字節)

union U
{int n;//4struct S{char c1;char c2;char c3;char c4;}s;//4
};int main()
{union U u = { 0 };u.n = 0x11223344;printf("%x %x %x %x\n", u.s.c1, u.s.c2, u.s.c3, u.s.c4);return 0;
}

聯合判斷大小端(驚為天人,大佬寫的,我借鑒)?

?

int check()
{union{char c;int i;}u;u.i = 1;return u.c;
}int main()
{int ret = check();if (ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}

?

?此時char不用進行強制轉換,因為字符型的ascll類型也是整型

?枚舉

enum day
{Mon,Tues,Web,Thur,Fri,Sat,Sun
};int main()
{printf("%d\n", Mon);printf("%d\n", Tues);printf("%d\n",Web);printf("%d\n", Thur);printf("%d\n", Fri);printf("%d\n", Sat);printf("%d\n", Sun);return 0;
}

?

枚舉類型默認值為0

還有我們可以對我們枚舉中的數據進行初始化,但他們都是常量,因此在主函數中,我們要再想要改變他們的值,那編譯器就會報錯。我們對其進行初始化我們進行觀察一下

?

?

?我們再來看一下我們在主函數中更改他的值進行報錯的情況:

?

?

因此在使用時我們應該注意。

枚舉類型的變量必須是屬于枚舉類型的,我們對此進行展示

enum day
{Mon=2,Tues=4,Web=5,Thur=6,Fri=9,Sat=11,Sun=19
};int main()
{enum day s = Mon;s = Fri;return 0;
}

?

枚舉的優點:

  1. 增加代碼的可讀性可維護性
  2. 和#define定義的標識符?較枚舉有類型檢查,更加嚴謹。
  3. 便于調試,預處理階段會刪除 #define 定義的符號
  4. 使??便,?次可以定義多個常量
  5. 枚舉常量是遵循作?域規則的,枚舉聲明在函數內,只能在函數內使?

枚舉類型的使用?

enum day
{Mon=2,Tues=4,Web=5,Thur=6,Fri=9,Sat=11,Sun=19
};int main()
{enum day s = Mon;//使用枚舉常量給枚舉變量賦值return 0;
}

?

C語言中可以拿整數給枚舉變量賦值,但C++中不行。

若有收獲,就點個贊吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208073.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208073.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208073.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Proteus仿真--基于ADC0808設計的調溫報警器

本文介紹基于ADC0808實現的調溫報警器設計&#xff08;完整仿真源文件及代碼見文末鏈接&#xff09; 溫度調節使用滑動變阻器模擬實現&#xff0c;ADC0808采集信號并輸出在LCD上面顯示&#xff0c;報警系統是LED燈和蜂鳴器實現聲光電報警 仿真圖如下 仿真運行視頻 Proteus仿真…

Java實現二分法的案例,什么是二分法

文章目錄 Java實現二分法的案例&#xff0c;什么是二分法二分法實現 Java實現二分法的案例&#xff0c;什么是二分法 二分法 概念&#xff1a; 二分法&#xff08;Bisection method&#xff09; 即一分為二的方法&#xff0c;又叫折半查找方法。把一組有序數列分為左右兩部分…

前程無憂接口分析

前程無憂接口分析 所需用到的工具URL解析通過抓包軟件或者開發者選項抓取數據包對代碼中的參數解析分析對acw_sc__v2進行分析對acw_sc__v2進行轉換代碼生成生成outPutList數組生成arg2參數生成arg3參數最終的效果 對詳情頁面的分析對timestamp__1258的生成分析 所需用到的工具 …

Vue3.0優點詳解

相對于Vue2.0 3.0有了比較大的改進&#xff0c;優勢主要有以下幾點&#xff1a; 一、性能提升 1、Vue3.0的響應式系統使用了Proxy代理對象&#xff0c;取代了Vue2.0中的Object.defineProperty&#xff0c;使得Vue3.0的響應式系統更快、更靈活。 2、Vue3.0對TypeScript的支持更…

Ubuntu22.04安裝完成后便可直接使用鍵盤上的Print鍵進行截圖

概要&#xff1a;Ubuntu22.04安裝完成后&#xff0c;無需安裝什么截圖軟件&#xff0c;可以直接使用鍵盤上的Print鍵進行截圖。 1、按一下Print鍵 我的電腦上Print鍵是PrtSc&#xff0c;如下圖所示 2、框選區域并截圖 如下圖中&#xff0c;可以框選(Selection)&#xff0c;也…

【教學類-35-06】17號的學號字帖延伸出的全體字帖(1-9去0)(A4豎版1份)

作品展示 背景需求&#xff1a; 給大4班17號同學單獨做了一個學號字帖后&#xff0c;我想可以把這樣的學具用在中班&#xff08;我馬上要成為中4班老師了&#xff09;&#xff0c;那就需要給全班做一份這樣的大號學號貼。 使用17號同學的word模板&#xff08;見下文&#xff…

3dMax vs Cinema4d哪個更好更適合你?

Cinema 4d和3dMax的區別 用于游戲風格、開發和風格可視化的3D建模、動畫和渲染軟件系統&#xff0c;為用戶提供制作和編輯動畫、視覺效果和環境的靈活性。4D CINEMA可能是由MAXON構建的強大的3D建模、運動圖形、繪畫和動畫軟件系統。Cinema 4D將在每個Windows和MAC操作系統上運…

多目標追蹤評價指標

多目標追蹤性能評價 基礎&#xff1a; GT&#xff1a;Ground Truth&#xff0c;是指真實的標簽或者真實的對象&#xff1b; TP&#xff1a;True Positive&#xff0c;被正確預測檢測到的樣本&#xff1b; TN&#xff1a;True Negative&#xff0c;被預測為負的負樣本&#…

啃下這50道筆試題,你就是SQL專家!(附答案,收藏備用)

【關注微信公眾號&#xff1a;跟強哥學SQL&#xff0c;回復“筆試”免費領取大廠SQL筆試題。】 有兩個名為Department&#xff08;部門&#xff09;和Employees&#xff08;員工&#xff09;的表結構如下&#xff1a; CREATE TABLE Department ( DepId int, DepName va…

文章解讀與仿真程序復現思路——電力系統自動化EI\CSCD\北大核心《考慮兩階段魯棒優化配置的多微網合作博弈》

這個標題涉及到多個概念&#xff0c;讓我們逐步解讀&#xff1a; 考慮兩階段魯棒優化配置&#xff1a; 兩階段&#xff1a; 指的是在解決問題或進行優化時&#xff0c;可能存在兩個不同的階段或步驟。這表明問題的解決不是一步完成的&#xff0c;而是需要經過多個步驟或階段。魯…

前端學習系列之CSS

目錄 CSS 簡介 發展史 優勢 基本語法 引用方式 內部樣式 行內樣式 外部樣式 選擇器 id選擇器 class選擇器 標簽選擇器 子代選擇器 后代選擇器 相鄰兄弟選擇器 后續兄弟選擇器 交集選擇器 并集選擇器 通配符選擇器 偽類選擇器 屬性選擇器 CSS基本屬性 優…

virtualenv創建虛擬環境

目錄 概念安裝創建虛擬環境激活虛擬環境刪除虛擬環境退出虛擬環境更改虛擬環境路徑概念 virtualenv是一個創建隔離的Python運行環境的工具。它允許用戶為每個Python項目創建一個獨立的虛擬環境,以避免不同項目之間的依賴沖突。 安裝 pip install virtualenv virtualenvwrapper…

JS如何實現豎屏輪播圖

首先是HTML搭建結構 <div class"banner-box"><div class"bannerbox"><div class"banner"><a class"a-img-ban"> <img class"img-ban" src"./img/640 (4).jpg" alt"終于等到你還…

SpringBoot項目訪問resources下的靜態資源

1.新建一個配置文件夾&#xff0c;放配置類 2.編輯 WebMvcConfig.java package com.southwind.configuration;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import or…

openlayers地圖使用---跟隨地圖比例尺動態標繪大小的一種方式3

openlayers地圖使用—跟隨地圖比例尺動態標繪大小的一種方式 預期&#xff1a;隨著地圖比例尺放大縮小&#xff0c;地圖上的標繪隨著變化尺寸 思路&#xff1a;通過VectorImage和動態修改Feature尺寸實現Feature跟隨地圖比例尺尺寸變化 優點&#xff1a;結合第1和第2種方式的…

openlayers地圖使用---跟隨地圖比例尺動態標繪大小的一種方式2

openlayers地圖使用—跟隨地圖比例尺動態標繪大小的一種方式2 預期&#xff1a;隨著地圖比例尺放大縮小&#xff0c;地圖上的標繪隨著變化尺寸 思路&#xff1a;通過不斷添加地圖圖層實現標繪的動態縮放 優點&#xff1a;標繪放大縮小非常流暢 缺點&#xff1a;標繪超過1000…

LangChain 22 LangServe用于一鍵部署LangChain應用程序

LangChain系列文章 LangChain 實現給動物取名字&#xff0c;LangChain 2模塊化prompt template并用streamlit生成網站 實現給動物取名字LangChain 3使用Agent訪問Wikipedia和llm-math計算狗的平均年齡LangChain 4用向量數據庫Faiss存儲&#xff0c;讀取YouTube的視頻文本搜索I…

等待和通知

引入 由于線程是搶占式執行的,因此線程之間的執行的先后順序難以預知 但是實際開發中我們希望合理協調多個線程之間執行的先后順序. 這里的干預線程先后順序,并不是影響系統的調度策略(內核里調度線程,仍然是無序調度). 就是相當于在應用程序代碼中,讓后執行的線程主動放棄被…

3DCAT+上汽奧迪:打造新零售汽車配置器實時云渲染解決方案

在 5G、云計算等技術飛速發展的加持下&#xff0c;云渲染技術迎來了突飛猛進的發展。在這樣的背景下&#xff0c;3DCAT應運而生&#xff0c;成為了業內知名的實時云渲染服務商之一。 交互式3D實時云看車作為云渲染技術的一種使用場景&#xff0c;也逐步成為一種新的看車方式&a…

設備溫度和振動綜合監測:溫振一體式傳感器的優點和應用

隨著工業設備的復雜性和自動化程度的提高&#xff0c;對設備狀態監測的需求也日益增加。溫振一體式傳感器作為一種集振動和溫度監測于一體的傳感器&#xff0c;具備多項優勢&#xff0c;因此在工業設備狀態監測領域得到廣泛應用。 溫振一體式傳感器基于振動傳感器和溫度傳感器的…