chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言結(jié)構(gòu)體用法很多,但是坑也很多

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 作者:黃工的嵌入式技術(shù) ? 2020-01-13 16:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

C語言可謂是編程界的傳奇語言,歷經(jīng)幾十年,依然排名前列。 前不久還寫了一篇文章《2019年11月C語言接近Java》,說了C語言是比較受歡迎的一種語言,有望在年底超過JAVA,再次成為第一名。 本文主要說的是C語言中的結(jié)構(gòu)體,結(jié)構(gòu)體是C語言中重要的一部分內(nèi)容,也是C語言中常用的一種數(shù)據(jù)結(jié)構(gòu)。 一、關(guān)于結(jié)構(gòu)體在C語言中,結(jié)構(gòu)體(struct)指的是一種數(shù)據(jù)結(jié)構(gòu),是C語言中復(fù)合數(shù)據(jù)類型(aggregate data type)的一類。 結(jié)構(gòu)體可以被聲明為變量、指針或數(shù)組等,用以實(shí)現(xiàn)較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)體同時也是一些元素的集合,這些元素稱為結(jié)構(gòu)體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。 結(jié)構(gòu)體的定義如下所示:

structtag{member-list}variable-list; 其中:

struct為結(jié)構(gòu)體關(guān)鍵字;

tag為結(jié)構(gòu)體的標(biāo)志;

member-list為結(jié)構(gòu)體成員列表,其必須列出其所有成員;

variable-list為此結(jié)構(gòu)體聲明的變量。

在一般情況下:tag、member-list、variable-list這3部分至少要出現(xiàn)2個。二、結(jié)構(gòu)體常規(guī)定義不同的定義,應(yīng)用在不同場景,所以,我們編程時需要結(jié)合實(shí)際情況來定義結(jié)構(gòu)體。

方法1:

定義結(jié)構(gòu)體stu,此時結(jié)構(gòu)體相當(dāng)于一個類型,比如int,如需使用此結(jié)構(gòu)體,方法同int.

struct stu{ char aa; short bb;intcc;}; struct stu stu1, stu2;

方法2:

定義結(jié)構(gòu)體stu同時定義需要使用的結(jié)構(gòu)體變量stu1, stu2。如后面再需要定義結(jié)構(gòu)體變量,方法同1.

struct stu{ char aa; short bb;intcc;}stu1, stu2; struct stu stu3;

方法3:

定義結(jié)構(gòu)體時,結(jié)構(gòu)體名稱缺省,同時定義結(jié)構(gòu)體變量stu1,stu2。但后面不可再定義結(jié)構(gòu)體變量。

struct{ char aa; short bb;intcc;}stu1, stu2;

提示:

這里不能像上面再定義結(jié)構(gòu)體變量:(以下錯誤)

structstu3;struct stu stu3;

三、使用typedef定義結(jié)構(gòu)體這里先簡單說下typedef.

在C和C++編程語言中,typedef是一個關(guān)鍵字。它用來對一個數(shù)據(jù)類型取一個別名,目的是為了使源代碼更易于閱讀和理解。它通常用于簡化聲明復(fù)雜的類型組成的結(jié)構(gòu) ,但它也常常在各種長度的整數(shù)數(shù)據(jù)類型中看到,例如size_t和time_t。 維基百科

方法4:

使用typedef定義結(jié)構(gòu)體同時,給stu結(jié)構(gòu)體別名STU,后續(xù)定義可不用使用struct stu,直接使用STU即可。

typedef struct stu{ char aa; short bb;intcc;}STU; STU stu1;

你會發(fā)現(xiàn),其實(shí)就是通過關(guān)鍵字typedef,將STU取代了struct stu。

當(dāng)然,也可以這么用:

struct stu stu1;

上面這種定義就失去了typedef的意思,所以不推薦。

方法5:

使用typedef定義結(jié)構(gòu)體時,省掉結(jié)構(gòu)體第一個別名stu,直接在后面加STU,使用方法同上。

typedef struct{ char aa; short bb; int cc;}STU; STU stu1;

方法6:

還有一種符合語法規(guī)則,但意義不大的定義方式。

typedef struct stu{ char aa; short bb; int cc;}; struct stu stu1;

以上這些定義方式算是語法的知識,如果還不懂,請再次復(fù)習(xí)一下。

四、結(jié)構(gòu)體大小計算

結(jié)構(gòu)體的大小,我相信很多人都沒搞明白。實(shí)際編程中也是很多地方都在應(yīng)用,比如:存儲、拷貝結(jié)構(gòu)體時都會牽涉到結(jié)構(gòu)體大小的問題。

1.對比兩結(jié)構(gòu)體大小,一樣嗎?

結(jié)構(gòu)體1:

struct stu{ char aa; short bb; char cc;}stu1;

結(jié)構(gòu)體2:

struct stu{ char aa; char bb; short cc;}stu2;

答案是不一樣。程序測試得出sizeof(stu1)=6, sizeof(stu2)=4. 2.分析不一樣原因

結(jié)構(gòu)體計算要遵循字節(jié)對齊原則,一般滿足三個準(zhǔn)則:

1)結(jié)構(gòu)體變量的首地址能夠被其最寬基本類型成員的大小所整除;

2)結(jié)構(gòu)體每個成員相對于結(jié)構(gòu)體首地址的偏移量(offset)都是成員大小的整數(shù)倍,如有需要編譯器會在成員之間加上填充字節(jié);

3)結(jié)構(gòu)體的總大小為結(jié)構(gòu)體最寬基本類型成員大小的整數(shù)倍,如有需要編譯器會在最末一個成員之后加上填充字節(jié);

對于上面結(jié)構(gòu)體stu1來說,最大字節(jié):2字節(jié),順序是 char->short->char:

2個字節(jié)

第一個char占一個字節(jié) 多的這一個補(bǔ)0,只是占位作用
short 剛好占2個字節(jié)
第二個char也占1個 多的這一個補(bǔ)0


對于上面結(jié)構(gòu)體stu2來說,最大字節(jié):2字節(jié),順序是 char->char->short:

第一個char占一個字節(jié) 第二個char占一個字節(jié)
short 剛好占2個字節(jié)

通過上面兩個表格,相信你應(yīng)該明白了,改成4字節(jié)的int,原理一樣。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    K210編譯時出現(xiàn)很多警告是什么原因?

    用rt thread studio 創(chuàng)建了K210工程,創(chuàng)建成功后編譯時,出現(xiàn)很多警告,這是什么原因??
    發(fā)表于 10-13 06:25

    pcb四層板中為什么加很多的盲孔,有什么作用

    pcb四層板中為什么加很多的盲孔有什么作用
    的頭像 發(fā)表于 09-06 11:32 ?636次閱讀

    電腦開機(jī)每次自動開啟很多軟件怎么辦?

    電腦開機(jī)每次自動開啟很多軟件怎么辦
    發(fā)表于 07-17 06:40

    提高篇——C語言核心技術(shù)(中文版)

    該資料是“C編程語言”和“C語言鏈接庫”的完整參考手冊。這本書的目的是提供一本方便、可靠的手冊,輔助日常的編程工作。本書描述C
    發(fā)表于 06-13 16:39

    深入理解C語言C語言循環(huán)控制

    C語言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無限循環(huán),C語言提供了多種循
    的頭像 發(fā)表于 04-29 18:49 ?1516次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環(huán)控制

    必看!15個C語言常見陷阱及避指南

    ? C語言雖強(qiáng)大,但隱藏的“不少!稍不留神就會導(dǎo)致程序崩潰、數(shù)據(jù)異常。本文整理15個高頻陷阱,助你寫出更穩(wěn)健的代碼! ? 陷阱1:運(yùn)算符優(yōu)先級混淆? 問題:運(yùn)算符優(yōu)先級不同可能導(dǎo)
    的頭像 發(fā)表于 03-16 12:10 ?1118次閱讀

    全套C語言培訓(xùn)資料—PPT課件

    全套C語言培訓(xùn)資料,共427頁,13個章節(jié):C語言概述、程序的靈魂—算法、數(shù)據(jù)類型 & 運(yùn)算符與表達(dá)式、順序程序設(shè)計、選擇結(jié)構(gòu)程序設(shè)
    發(fā)表于 03-12 14:50

    源代碼加密、源代碼防泄漏c/c++與git服務(wù)器開發(fā)環(huán)境

    源代碼加密對于很多研發(fā)性單位來說是至關(guān)重要的,當(dāng)然每家企業(yè)的業(yè)務(wù)需求不同所用的開發(fā)環(huán)境及開發(fā)語言不盡相同,今天主要來講一下c++及git開發(fā)環(huán)境的源代碼防泄密保護(hù)方案。企業(yè)源代碼泄密
    的頭像 發(fā)表于 02-12 15:26 ?726次閱讀
    源代碼加密、源代碼防泄漏<b class='flag-5'>c</b>/<b class='flag-5'>c</b>++與git服務(wù)器開發(fā)環(huán)境

    分析C語言代碼結(jié)構(gòu)的設(shè)計問題

    來分析一個C語言代碼結(jié)構(gòu)的設(shè)計問題。 這段代碼,使用了兩次malloc,分別給 p1 和 p2 申請了內(nèi)存。用完后,內(nèi)存釋放,防止內(nèi)存泄漏。 大家覺得,這樣的代碼設(shè)計有沒有問題。 代碼是某位學(xué)員在
    的頭像 發(fā)表于 02-11 09:31 ?546次閱讀

    ADS1248一旦配置Burnout Current,檢測到的值精度降低了很多,為什么?

    跪求指點(diǎn),據(jù)芯片手冊里介紹,Burnout Current是用來檢測前端傳感器失效的,但是現(xiàn)在設(shè)計RTD檢測模塊時,不配置Burnout Current檢測精度很高,但是一旦配置Burnout Current,檢測到的值精度降低了
    發(fā)表于 01-10 13:52

    ads1191做ecg波形紋波很多是哪里出了問題?

    濾波器都加上了,但是就是紋波多,之前有一次測試紋波好很多,不知道是RLD電路問題還是哪里的問題?
    發(fā)表于 01-10 08:34

    ADS1299單端輸入噪聲為什么會高很多?

    想請教下TI的工程師們。最近在設(shè)計基于ADS1299的采集板,采集電路參考了ADS1299 EVM開發(fā)板電路,測試了雙端輸入和單端輸入,發(fā)現(xiàn)單端輸入時噪聲要高很多,特別是50Hz工頻干擾。單端輸入
    發(fā)表于 12-27 07:10

    在學(xué)習(xí)go語言的過程踩過的

    作為一個5年的phper,這兩年公司和個人都在順應(yīng)技術(shù)趨勢,新項(xiàng)目慢慢從php轉(zhuǎn)向了go語言,從2021年到現(xiàn)在,筆者手上先后開發(fā)了兩個go項(xiàng)目。在學(xué)習(xí)go語言的過程中學(xué)習(xí)并總結(jié)了
    的頭像 發(fā)表于 11-11 09:22 ?740次閱讀

    C語言C++中結(jié)構(gòu)體的區(qū)別

    同樣是結(jié)構(gòu)體,看看在C語言C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?973次閱讀

    C語言與Java語言的對比

    C語言和Java語言都是當(dāng)前編程領(lǐng)域中的重要成員,它們各自具有獨(dú)特的優(yōu)勢和特點(diǎn),適用于不同的應(yīng)用場景。以下將從語法特性、內(nèi)存管理、跨平臺性、性能、應(yīng)用領(lǐng)域等多個方面對C
    的頭像 發(fā)表于 10-29 17:31 ?1604次閱讀