嵌入式全棧開發學習筆記---C語言筆試復習大全23

目錄

聯合體

聯合體的定義

聯合體的長度

如果來判斷設備的字節序?

如何把大端數據轉換成小端數據?

枚舉

枚舉的定義


上一篇復習了結構體,這一節復習聯合體和枚舉。

說明:我們學過單片機的一般都是有C語言基礎的了,網上關于C語言的資料有很多,大家如果對C語言不熟悉的話可以先去詳細學一下,再以這篇博文作為復習資料學習。

這篇博文的目的是復習C語言,我們會陸續以30多個編程題作為復習要點,這30多個編程題基本涵蓋了C語言所有的內容了,只要你掌握了這30多個編程題,那么你的C語言基本就沒什么問題了。

注意:由于本專欄是嵌入式全棧開發專欄,為了我們能熟悉以后實際工作中的開發環境,我們寫C語言全部在Linux中的vim編輯器中寫,這么做事為了我們能夠熟練掌握Linux系統的常用命令以及Linux上的vim編輯器的常用工作命令,以達到對口訓練的目的!

vim編輯器的一些工作命令在上一篇博文中已經詳細介紹過了,如果不了解可以先去看看。

我們正式開始:

聯合體

為什么要學習聯合體?

結構體有個缺點就是比較占內存,因為我們每次使用結構體時要給里面的每個成員都開辟空間,但是有時候我們只需要用到里面的某個成員,而不是全部,我們只想為我們使用到的成員申請空間,但是其他成員又不能直接刪掉,因為我們有時候還會使用到其他成員,所以怎么辦呢?這個時候聯合體就派上了用場。

聯合體又叫共用體。是一種特殊的數據類型,允許在相同的內存位置存儲不同的數據類型。聯合體可以帶有多個成員,但是任何時候只能有一個成員帶有值。聯合體提供了一種使用相同的內存位置的有效方式。

聯合體的定義

定義聯合體需要用到union關鍵字。union 語句定義了一個新的數據類型,帶有多個成員。

union 語句的格式如下:

union 共用體名

{ ?????????

????????成員表列

};

聯合體的長度

例如:

union test

{

????????int a;

????????int b;

????????char c;

};

它的總長度是4

聯合體的特點:

  1. 聯合體的所有成員共享同一塊內存空間;
  2. 聯合體大小:只為最長成員分配空間;

如果我們給a初始化為100,test.a=100;

由于內存是同一個空間,我們訪問a,即是訪問b,因此當我們打印b的時候,結果也是100,如果訪問char c情況就有可能不一樣,因為我們不知道c是在4個字節的哪一端,取決于電腦的字節序。

筆試的時候經常用聯合體來判斷設備的字節序。(這個我們在復習一維數組的時候就已經提到過了)

小端字節序:低字節存放在低地址,高字節存放在高地址。

大端字節序:高字節存放在低地址,低字節存放在高地址。

注意:數組無疑是:數組元素的地址是從低地址到高地址,比如a[0]存放在低地址,a[4]存放在高地址。

如果來判斷設備的字節序?

示例:

假設聯合體:

union test

{

????????char ch[2];

????????short val;

};

我們讓val=0x0102;這個是16進制,里面有兩個字節,分別為0000 0001(高字節)和0000 0010(低字節),我們由于ch和val共享一個空間,那么我們只要判斷0000 0001是放在了ch[0](低地址)還是放在了ch[1](高地址)就能知道設備是小端字節序還是大端字節序了。

參考代碼:

#include <stdio.h>union test
{char ch[2];//兩個字節short val;//short是兩個字節
};int main()
{//定義聯合體變量union test t;t.val=0x0102;if(t.ch[0]==1&&t.ch[1]==2){printf("big\n");}else if(t.ch[0]==2&&t.ch[1]==1){printf("small\n");}return 0;	
}

運行結果:

該設備為小端字節序,一般來說電腦或者我們使用的開發板一般都是小端字節序。

如何把大端數據轉換成小端數據?

我們只需要將高字節和低字節調換位置即可

示例:

假設int num=1; 0000 0000 0000 0000 0000 0000 0000 0001,這個1屬于低字節,現在要求將它挪到高字節。

提示:將低字節取出來通過位移運算移動到高字節。

參考代碼:

#include <stdio.h>int main()
{int num=1;printf("%d\n", ((num & 0x000000ff)<<24)|(num &0x0000ff00<<8)|(num &0x00ff0000>>8)|(num &0xff000000>>16));return 0;}

運行結果:

用計算器計算的結果也是16777216

枚舉

枚舉的關鍵字:enum

枚舉和宏定義有點類似。但是有些情況宏定義顯得有點繁瑣,比如給每個星期的英文縮寫重新定義一個數字, 那么我們需要寫:

#define MON 1

#define TUE 2

#define WED 3

......

一個星期7天,那我們重復宏定義7次,這樣就顯得有點繁瑣了,因此我們需要用到枚舉。

枚舉的定義

enum weekday?//這個weekday在這里可以不用也寫

{

????????sun,mon,tue,wed,thu,fri,sat

};

雖然枚舉中我們并沒有給sun,mon,tue,wed,thu,fri,sat定義0,1,2,3,....但是編譯器會默認sun是0,mon是1,tue是2....這樣就可以申請繁瑣的定義操作。

當然如果你不想要枚舉默認,那么你也可以自己指定,比如

enum

{

????????sun,mon=11,tue,wed,thu,fri,sat

};

當我們這樣講mon定義成11時,那么后面的tue也就跟著變成12了,依次遞增。

以上就是這篇內容,如想了解更多,歡迎訂閱本專欄!

如有問題可評論區或者私信留言,如果想要進交流群請私信!

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

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

相關文章

docker鏡像容器搭建nominatim地理編碼服務

1、下載地圖pbf文件: https://planet.openstreetmap.org/ 2、nominatim官網 https://nominatim.org/release-docs/latest/admin/Installation/ 3、地圖文件打包&#xff1a; docker run -it --shm-size20g \ -e PBF_PATH/nominatim/data/china-latest.osm.pbf \ -e REPLIC…

C語言PTA練習題:三角形類別,輸入三角形三條邊,求面積,四則計算器,猴子吃桃

7-1 三角形類別 輸入三個整數&#xff0c;以這三個數為邊長&#xff0c;判斷是否構成三角形&#xff1b;若不能輸出"no"&#xff0c;若構成三角形&#xff0c;進一步判斷它們構的是&#xff1a;銳角三角形或直角三角形或鈍角三角形.分別輸出"ruijiao",&qu…

GitLens或者Git Graph在vscode中對比文件歷史變化,并將歷史變化同步到當前文件中

有時候我們上周改的代碼&#xff0c;現在想反悔把它恢復過來&#xff0c;怎么辦&#xff1f;&#xff1f;&#xff1f;很好&#xff0c;你有這個需求&#xff0c;說明你找對人了&#xff0c;那就是我們需要在vscode中安裝這個插件&#xff1a;GitLens或者Git Graph&#xff0c;…

門禁-jenkins的構建狀態同步到gitlab提交流水線

API接口文檔 https://docs.gitlab.cn/jh/api/commits.html 配置pipline流水線 生成http請求代碼&#xff1a; 使用HttpRequest插件生成 - sharelibs內容 //這是share libs里的 package devopsdef httpReq(reqType, reqUrl, reqBody, accessToken){def gitServer "…

有一個3x4的矩陣,要求用函數編寫程序求出其中值最大的那個元素,以及其所在的行號和列號

常量和變量可以用作函數實參&#xff0c;同樣數組元素也可以作函數實參&#xff0c;其用法與變量相同。數組名也可以作實參和形參&#xff0c;傳遞的是數組的起始地址。 用數組元素作函數實參&#xff1a; 由于實參可以是表達式&#xff0c;而數組元素可以是表達式的組…

Oracle 12C開機自啟動

Oracle 12C設置開機自啟動 1、本文內容 背景說明檢查Oracle當前環境修改配置文件/etc/oratab添加數據庫啟動腳本dbstart 2、背景說明 最近因上線新的兩套系統&#xff0c;增加4套測試環境&#xff0c;由于昨晚機房電路故障&#xff0c;部分物理服務器需要關鍵&#xff0c;電…

2000 年至 2015 年中國(即水稻、小麥和玉米1km 網格)三種主要作物年收獲面積的時空變化

摘要 可靠、連續的主要作物收獲面積信息對于研究地表動態和制定影響農業生產、土地利用和可持續發展的政策至關重要。然而&#xff0c;中國目前還沒有高分辨率的空間明確和時間連續的作物收獲面積信息。全國范圍內主要農作物收獲面積的時空格局也鮮有研究。在本研究中&#xf…

2024年【熔化焊接與熱切割】考試內容及熔化焊接與熱切割考試報名

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 熔化焊接與熱切割考試內容考前必練&#xff01;安全生產模擬考試一點通每個月更新熔化焊接與熱切割考試報名題目及答案&#xff01;多做幾遍&#xff0c;其實通過熔化焊接與熱切割復審模擬考試很簡單。 1、【單選題】…

Django的模型層——2模型實例

1. 類的屬性 objects&#xff1a;是Manager類型的對象&#xff0c;用于與數據庫進行交互 當定義模型類時沒有指定管理器&#xff0c;則Django會為模型類提供一個名為objects的管理器 支持明確指定模型類的管理器 class BookInfo(models.Model):...books models.Manager()當為…

C# 運算符重載的技術深入分析

C# 運算符重載的技術深入分析 一、引言 在C#中&#xff0c;運算符重載是一個允許開發者自定義類或結構中特定運算符行為的特性。通過這個特性&#xff0c;可以為自定義類型創建與內置類型一致的語義&#xff0c;使得代碼更直觀、更易理解。 二、運算符重載基礎 2.1 定義和概…

網絡安全從入門到精通(特別篇I):應急響應之網站入侵排查思路

藍隊應急響應實戰 1. 應急響應-網站入侵-基礎知識2. 應急響應-網站入侵-技能掌握3. 應急響應-網站入侵-案例分析3.1 網站入侵-排查思路-首要任務3.2 IIS&.NET-注入-基于時間配合日志分析3.3 Apache&PHP-漏洞-基于漏洞配合日志分析3.4 Tomcat&JSP-弱口令-基于后門配…

SpringBoot【1】集成 Druid

SpringBoot 集成 Druid 前言創建項目修改 pom.xml 文件添加配置文件開發 java 代碼啟動類 - DruidApplication配置文件-propertiesDruidConfigPropertyDruidMonitorProperty 配置文件-configDruidConfig 控制層DruidController 運行驗證Druid 的監控應用程序 前言 JDK版本&…

33.perf工具使用

文章目錄 基本介紹perf命令使用reference 歡迎訪問個人網絡日志&#x1f339;&#x1f339;知行空間&#x1f339;&#x1f339; 基本介紹 Perf&#xff08;Performance Counters for Linux&#xff0c;性能計數器子系統&#xff09;是一個Linux性能分析工具&#xff0c;用于分…

分析 Base64 編碼和 URL 安全 Base64 編碼

前言 在處理數據傳輸和存儲時&#xff0c;Base64 編碼是一種非常常見的技術。它可以將二進制數據轉換為文本格式&#xff0c;便于在文本環境中傳輸和處理。Go 語言提供了對標準 Base64 編碼和 URL 安全 Base64 編碼的支持。本文將通過一個示例代碼&#xff0c;來分析這兩種編碼…

前端開發-添加公用的ts文件,并在Vue文件中引用

一般我們把頁面要用的公用函數寫在一個ts文件中 通過調用這個ts文件讓我們可以在vue文件中使用函數 Eg&#xff1a;我們現在創建一個formRules.ts文件 然后在我們需要調用該函數體的vue文件中 import { required } from "/utils/formRules";有可能語法一開始會提示…

Phobos勒索病毒:最新變種phobos襲擊了您的計算機?

一、導言 在數字化浪潮中&#xff0c;網絡安全問題日益凸顯&#xff0c;而.Phobos勒索病毒無疑是其中的隱形殺手。它潛伏在網絡的每一個角落&#xff0c;等待著合適的時機對目標發動致命一擊。本文將深入探討.Phobos勒索病毒的新特點、傳播途徑&#xff0c;并提出一系列創新的…

C++面試題記錄(網絡)

TCP與UDP區別 1. TCP面向連接&#xff0c;UDP無連接&#xff0c;所以UDP數據傳輸效率更高 2.UDP可以支持一對一、一對多、多對一、多對多通信&#xff0c;TCP只能一對一 3. TCP需要在端系統維護連接狀態&#xff0c;包括緩存&#xff0c;序號&#xff0c;確認號&#xff0c;…

防火墻——域網絡、專用網絡、公用網絡

在防火墻設置中&#xff0c;域網絡、專用網絡和公用網絡是指計算機連接到網絡時所處的不同環境。每種環境都有不同的安全級別和配置。 1、域網絡&#xff08;寬松&#xff09; 域網絡是指計算機加入了一個Windows域&#xff08;Domain&#xff09;環境&#xff0c;這通常在企業…

程序員的那些經典段子

哈嘍&#xff0c;大家好&#xff0c;我是明智&#xff5e; 本周咱們已經解決了在面試中經常碰到的OOM問題&#xff1a; 《美團一面&#xff0c;發生OOM了&#xff0c;程序還能繼續運行嗎&#xff1f;》 《美團一面&#xff1a;碰到過OOM嗎&#xff1f;你是怎么處理的&#xff1…