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

目錄

結構體

結構體的聲明

定義結構體變量

訪問結構體成員進行初始化

通過結構體變量名訪問結構體成員

結構體指針

結構體指針的定義

通過結構體指針訪問結構體成員

結構體數組

結構體數組的定義

遍歷結構體數組

結構體的長度(筆試重點)


上一篇復習了最后6道編程題,這一節開始復習結構體的內容。

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

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

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

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

我們正式開始:

結構體

為什么要學習結構體?

我們以往存儲數據都是用數組來存儲的,但是數組有個缺點就是存儲的數據的類型必須是一樣的。如果我們想要存儲一個人的信息,比如,身高、年齡等,身高是浮點型,年齡是整型,那這種數據用數組來存儲是不行的,因此我們需要學習結構體。

結構體的聲明

struct的語法格式如下:

struct ?結構體名 {成員表列}; //分號不能丟

比如:

struct student

{

????????int num;

????????char name[20];

????????float score;

????????char addr[30];

} ; //注意:這個分號不能丟

注:struct是一個關鍵字,結構體內部的各變量為結構體成員。

結構體聲明后之后可以定義結構體變量:

定義結構體變量

例如:struct student s1;

定義結構體變量初始化

和其它類型變量一樣,對結構體變量可以在定義時指定初始值。

例如:struct student s2={jack,1,m};

訪問結構體成員進行初始化

通過結構體變量名訪問結構體成員

我們前面的s1沒有初始化,如果你想要讓它初始化時,可以通過“結構體變量名.成員名”來訪問結構體中的成員,例如:s1.id=2; s1.sex=f;

注意:如果要通過結構體變量名來訪問數組成員進行初始化,不能直接寫成s1.name=tom;//這樣寫等價于char name[32];name=aaa;由于name數組名是個地址常量,因此不能被修改。

可以這樣寫:strcpy(s1.name,tom);

也可以在結構體聲明時直接初始化:

struct Books

{

???char ?title[50];

???char ?author[50];

???char ?subject[100];

???int ??book_id;

} book = {"C 語言", "RUNOOB", "編程語言", 123456};

如果嫌結構體的聲明部分太長,可以將結構體聲明改個名字:

例如:

typedef struct Books

{

???char ?title[50];

???char ?author[50];

???char ?subject[100];

???int ??book_id;

}stu?;

這樣我們就把

struct Books

{

???char ?title[50];

???char ?author[50];

???char ?subject[100];

???int ??book_id;

};

這么一大串改成了stu

通過結構體變量名輸出結構體成員,只能一位一位輸出,例如:printf(%s %d %c\n,s1.name, s2.id, s1.sex);

結構體指針

結構體指針的定義

結構體指針應該指向結構體變量,我們要先申請一塊內存給結構體變量,然后再讓結構體指針指向這塊內存。

stu?*ps=(stu*)malloc(sizeof(stu)*1);

通過結構體指針訪問結構體成員

通過“結構體指針變量名->成員名”來訪問結構體成員并初始化

ps->id=3;

ps->sex=m;

注意:如果是訪問數組成員,應寫成strcpy(ps->name,boy);

如果要通過指針輸出結構體成員,應該寫成例如:printf(%s %d %c\n,ps->name, ps->id, ps->sex);

結構體數組

結構體數組的定義

數組中的每個元素都是一個結構體

例如:

stu s3[5]={{aa,4,f},{bb,5,f}};

遍歷結構體數組

int i;

for(i=0;i<5;i++)

{

????????printf(“%s %d %c\n,s3[i].name,s3[i].id,s3[i].sex);

}

結構體的長度(筆試重點)

計算結構體的長度有兩個原則:

  1. 結構體的總長度一定是最長成員的數據類型的整數倍;
  2. 每個成員的偏移量一定是該成員長度的整數倍;

例如:

struct test

{

int a;

int b;

char c;

char d;

} ;

這樣運行出來的結果是12

因為該結構體有4個成員,要保證結構體的總長度一定是最長成員的數據類型的整數倍,因此要在后面補兩個字節。

如果我們將該結構體成員調整一下順序,

例如:

struct test

{

int a;

char c;

int b;

char d;

} ;

這樣運行出來的結果是16

因為char后面是int,為了保證int偏移量是自己的整數倍,因此char后面要空出三個字節,然后又由于int是最長成員,為了保證int總長度是int的整數倍,因此在后面補3個字節,所以總長度是16

但是筆試的時候會有更加復雜的情況,比如結構體中嵌套結構體

例如:

struct test 2

{

int z;

struct test t;

char e;

};

注意:不要以為總長度是struct test t長度的整數倍,我們計算的時候還是要把struct test t拆開,最長成員還是int。計算的時候要保證struct test t在內存中的完整性,不能拆開。

這樣運行的結果是24

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

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

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

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

相關文章

深入理解C++多態-虛函數

引言 C多態的實現方式可以分為靜態多態和動態多態&#xff0c;其中靜態多態主要有函數重裝和模板兩種方式&#xff0c;動態多態就是虛函數。下面我們將通過解答以下幾個問題的方式來深入理解虛函數的原理&#xff1a; 為什么要引入虛函數&#xff1f;&#xff08;用來解決什么…

2024年最新信息安全標準匯總

這些標準是我們在數字化時代保障網絡安全、數據安全的重要基石&#xff0c;對于維護國家安全、企業利益和個人信息安全具有至關重要的作用。 隨著科技的快速發展&#xff0c;網絡空間的安全威脅也在不斷演變&#xff0c;從復雜的網絡攻擊到個人信息泄露&#xff0c;這些安全風…

JAVA面試題大全(十四)

1、Kafka 可以脫離 Zookeeper 單獨使用嗎&#xff1f;為什么&#xff1f; kafka不能脫離zookper單獨使用&#xff0c;因為kafka使用zookper管理和協調kafka的節點服務器。 2、Kafka 有幾種數據保留的策略&#xff1f; Kafka提供了多種數據保留策略&#xff0c;這些策略用于定…

哈希雙指針

文章目錄 一、哈希1.1兩數之和1.2字母異位詞分組1.3最長子序列 二、雙指針2.1[移動零](https://leetcode.cn/problems/move-zeroes/description/?envTypestudy-plan-v2&envIdtop-100-liked)2.2[盛最多水的容器](https://leetcode.cn/problems/container-with-most-water/d…

嵌入式0基礎開始學習 ⅠC語言(7)指針

0.問題引入 int a 5; a 1024; //把1024存放到變量a的地址中去 b a; // 取變量a的值&#xff0c;賦值給b >在c語言中&#xff0c;任何一個變量&#xff0c;都有兩層含義 (1)代表變量的存儲單元的地址&#xff1a;變量的地址…

藍橋樓賽第30期-Python-第三天賽題 統計學習數據題解

樓賽 第30期 Python 模塊大比拼 統計學習數據 介紹 JSON&#xff08;JavaScript Object Notation, /?d?e?s?n/&#xff09;是一種輕量級的數據交換格式&#xff0c;最初是作為 JavaScript 的子集被發明的&#xff0c;但目前已獨立于編程語言之外&#xff0c;成為了通用的…

分享10個國內可以使用的GPT中文網站

在今天的人工智能領域&#xff0c;基于對話的語言模型已成為研究的熱點&#xff0c;尤其是像 ChatGPT 這樣因其出色的語言理解與對話交互能力而廣受關注的模型。本文將介紹10個國內可以直接使用GPT的網站&#xff0c;旨在為大家在選擇和使用這些優秀的AI工具時提供有價值的參考…

使用pyqt繪制一個愛心!

使用pyqt繪制一個愛心&#xff01; 介紹效果代碼 介紹 使用pyqt繪制一個愛心&#xff01; 效果 代碼 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget from PyQt5.QtGui import QPainter, QPen, QBrush, QColor from PyQt5.QtCore import Qt, Q…

[保姆式教程]使用目標檢測模型YOLO V8 OBB進行旋轉目標的檢測:訓練自己的數據集(基于衛星和無人機的農業大棚數據集)

最近需要做基于衛星和無人機的農業大棚的旋轉目標檢測&#xff0c;基于YOLO V8 OBB的原因是因為嘗試的第二個模型就是YOLO V8&#xff0c;后面會基于YOLO V9模型做農業大棚的旋轉目標檢測。YOLO V9目前還不能進行旋轉目標的檢測&#xff0c;需要修改代碼 PS:歡迎大家分享農業大…

【研發日記】Matlab/Simulink技能解鎖(九)——基于嵌入式處理器仿真

文章目錄 前言 基于嵌入式處理器仿真 使用方式 第一步&#xff0c;硬件連接 第二步&#xff0c;配置硬件資源 第三步&#xff0c;配置XCP協議 第四步&#xff0c;加載Contrl Model 第五步&#xff0c;運行仿真 第六步&#xff0c;仿真報告 分析和應用 總結 參考資料 前言…

無線技術整合到主動噪聲控制(ANC)增強噪聲降低性能

主動噪聲控制&#xff08;ANC&#xff09;已成為一種廣泛使用的降噪技術。基本原理是通過產生與外界噪音相等的反向聲波&#xff0c;將噪音中和&#xff0c;從而達到降噪的效果。ANC系統通常包括以下幾個部分&#xff1a;參考麥克風、處理芯片、揚聲器和誤差麥克風。參考麥克風…

家政保潔服務小程序怎么做?家政公司快速搭建專屬小程序

在數字化時代背景下&#xff0c;家政保潔服務行業也迎來了線上轉型的新機遇。家政保潔服務小程序&#xff0c;作為一種新型的線上服務平臺&#xff0c;不僅能夠提升家政公司的服務效率&#xff0c;還能為顧客提供更加便捷的預約上門服務體驗。那么家政保潔服務小程序怎么做呢&a…

AI與量子計算:科技新時代的雙重飛躍

在科技的浪潮中,每一次技術革新都如同一次深海潛行,探尋著未知的奧秘。近年來,人工智能(AI)和量子計算兩大領域的發展尤為引人注目,它們不僅代表了科技的未來趨勢,更是人類社會進步的強大動力。本文將深入探討這兩項技術的最新進展、潛在影響以及它們之間的潛在聯系。 …

2024年3月小程序類目調整匯總公告

各位小程序開發者&#xff1a; 為進一步加強平臺的規范管理&#xff0c;優化開發者類目選擇體驗&#xff0c;現對以下類目進行調整&#xff0c;請各位開發者知悉。 類目調整 #【文娛-小說】 現資質要求 &#xff08;3選1&#xff09;&#xff1a; 1、提供《互聯網出版許可…

從零開始搭建一個SpringBoot項目

目錄 Spring BootSpring Boot 項目開發環境1、快速創建SpringBoot項目2、pom.xml 添加 Meavn 依賴3、配置application.yml4、驗證數據庫是否連接成功5、配置 Druid 數據源 Spring Boot 整合 MyBatis1、準備依賴2、application-dev.yml 配置3、啟動類添加Mapper接口掃描器4、設置…

BWVS 靶場測試

一、PHP弱類型 is_numeric() 輸入&#xff1a;127.0.0.1/BWVS/bug/php/code.php # 1、源代碼分析 如果num不是數字&#xff0c;那么就輸出num&#xff0c;同時如果num1&#xff0c;就輸出flag。即num要是字符串又要是數字 # 2、函數分析&#xff1a; is_numeric()函數&…

使用Nginx的Mirror模塊的指南

Nginx 是一個廣泛使用的 web 服務器和反向代理服務器&#xff0c;性能出色且易于配置。Nginx 提供了各種模塊來擴展其功能&#xff0c;其中一個有用的模塊是 mirror 模塊。本文將詳細介紹 Nginx 的 mirror 模塊&#xff0c;包括其用途、使用場景、注意事項以及示例代碼。 1. m…

《最新出爐》系列入門篇-Python+Playwright自動化測試-40-錄制生成腳本

宏哥微信粉絲群&#xff1a;https://bbs.csdn.net/topics/618423372 有興趣的可以掃碼加入 1.簡介 各種自動化框架都會有腳本錄制功能&#xff0c; playwright這么牛叉當然也不例外。很早之前的selenium、Jmeter工具&#xff0c;發展到每種瀏覽器都有對應的錄制插件。今天我們…

牛客NC392 參加會議的最大數目【中等 貪心+小頂堆 Java/Go/PHP 力扣1353】

題目 題目鏈接&#xff1a; https://www.nowcoder.com/practice/4d3151698e33454f98bce1284e553651 https://leetcode.cn/problems/maximum-number-of-events-that-can-be-attended/description/ 思路 貪心優先級隊列Java代碼 import java.util.*;public class Solution {/**…

java面試高級篇(JVM、Mysql、Redis、Kafka)

文章目錄 面試專題-java高級篇1. JVM有做過jvm的調優嗎?常用的jvm參數調優有哪些?如果jvm持續一段時間頻繁的發生Young GC (輕GC) 可能原因有哪些? 2. Mysql2.1. 基本功(見為知筆記)2.2. 什么是索引2.3. 索引的優劣勢2.4. MySQL的索引結構2.4.1. B-Tree索引2.4.2. BTree索引…