国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言結構體用法很多,但是坑也很多

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

掃碼添加小助手

加入工程師交流群

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

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

struct為結構體關鍵字;

tag為結構體的標志;

member-list為結構體成員列表,其必須列出其所有成員;

variable-list為此結構體聲明的變量。

在一般情況下:tag、member-list、variable-list這3部分至少要出現2個。二、結構體常規定義不同的定義,應用在不同場景,所以,我們編程時需要結合實際情況來定義結構體。

方法1:

定義結構體stu,此時結構體相當于一個類型,比如int,如需使用此結構體,方法同int.

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

方法2:

定義結構體stu同時定義需要使用的結構體變量stu1, stu2。如后面再需要定義結構體變量,方法同1.

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

方法3:

定義結構體時,結構體名稱缺省,同時定義結構體變量stu1,stu2。但后面不可再定義結構體變量。

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

提示:

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

structstu3;struct stu stu3;

三、使用typedef定義結構體這里先簡單說下typedef.

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

方法4:

使用typedef定義結構體同時,給stu結構體別名STU,后續定義可不用使用struct stu,直接使用STU即可。

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

你會發現,其實就是通過關鍵字typedef,將STU取代了struct stu。

當然,也可以這么用:

struct stu stu1;

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

方法5:

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

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

方法6:

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

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

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

四、結構體大小計算

結構體的大小,我相信很多人都沒搞明白。實際編程中也是很多地方都在應用,比如:存儲、拷貝結構體時都會牽涉到結構體大小的問題。

1.對比兩結構體大小,一樣嗎?

結構體1:

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

結構體2:

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

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

結構體計算要遵循字節對齊原則,一般滿足三個準則:

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

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

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

對于上面結構體stu1來說,最大字節:2字節,順序是 char->short->char:

2個字節

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


對于上面結構體stu2來說,最大字節:2字節,順序是 char->char->short:

第一個char占一個字節 第二個char占一個字節
short 剛好占2個字節

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    手把手教你學51單片機-C語言

    為何物。要么只是一些很簡單的小實驗,學完后只能做到點亮個小燈、顯示個數字等,C語言指針都沒有用到過,綜合實踐的例子更是一個沒有。在學完這類教材后無法深入下去,很難跟實際項目開發銜接起來,于是可能會懷疑
    發表于 03-05 11:47

    C語言主要特點

    。 3.數據類型豐富。C語言提供的數據類型包括整形、浮點型、字符型、數組類型、指針類型、結構體類型和共用體類型等,C99又擴充了復數浮點型、超長整型(long long)和布爾類型(b
    發表于 01-05 07:41

    C語言回調函數原來這么簡單

    更加的清晰,能使代碼結構的邏輯更加清晰,結構更加好。 那回調函數的到底是什么呢?它又是怎么實現的呢? 這是本次想要簡單分析的一個主題。 但是在說回調函數之前,我覺得很有必要先說明一下
    發表于 12-30 06:45

    C語言C++的區別及聯系

    class等面向對象的特性和機制。但是,后來經過一步步修訂和很多次演變,最終才形成了現如今這個支持一系列重大特性的龐大編程語言。 一、C語言
    發表于 12-24 07:23

    C語言中一些令人震驚的結構介紹

    C語言同意一些令人震驚的結構,下面的結構是合法的嗎,如果是它做些什么? int a = 5, b = 7, c;
    發表于 12-23 08:15

    單片機C語言編程的心得

    寫這個8*8按鍵程序的過程中,不管是在自己寫還是參考別人程序的過程中,發現自己對C語言有些基本知識點和編程規范有很多不懂的地方,有些是自己以前的編程習慣不好,有些就是基礎知識不扎實的表現,所以總結
    發表于 12-08 07:44

    為什么單片機還在用C語言編程?

    的缺陷 高級語言存在的目的是可以實現更為優化的算法,更多的是為了方便的執行方案,但是,高級語言對程序存儲空間的占用要比匯編和C語言
    發表于 11-28 07:37

    C語言程序的結構

    ,87LPC764有4KB的Flash ROM,而筆者的程序量只有2KB多點,因而第一個想法是改用C語言作為主要的開發語言,應該不至于導致代碼空間不夠用。其次,考慮到需要定時功能的模塊(或稱任務,以下統稱任務
    發表于 11-26 08:12

    C語言的分支結構介紹

    1.簡單if語句 C語言中的分支結構語句中的if條件語句。 簡單if語句的基本結構如下: 代碼語言:javascript if(表達
    發表于 11-25 07:48

    STM32 5 個容易踩的外設使用技巧

    STM32是嵌入式開發領域的熱門MCU,功能豐富到幾乎可以完成所有常見控制任務:GPIO、ADC、UART、定時器、DMA……應有盡有。但是,正因為功能強大,開發中踩的機會隨之增多。很多
    的頭像 發表于 11-24 19:04 ?822次閱讀
    STM32 5 個容易踩<b class='flag-5'>坑</b>的外設使用技巧

    C語言結構體使用

    型的數據組合。 結構體的聲明與定義 結構體的聲明一般形式為: c struct 結構體名{ 成員1; 成員2; ... }; //注意分號 例如:
    發表于 11-12 08:30

    C語言的printf基本用法介紹

    中使用頻率最高的一個函數一點不為過,每個C語言程序員都應該掌握 printf 的用法,這是最基本的技能。 不過 printf 的用法比較
    發表于 11-12 07:04

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

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

    深入理解C語言C語言循環控制

    C語言編程中,循環結構是至關重要的,它可以讓程序重復執行特定的代碼塊,從而提高編程效率。然而,為了避免程序進入無限循環,C語言提供了多種循
    的頭像 發表于 04-29 18:49 ?2043次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環控制

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

    ? C語言雖強大,但隱藏的“不少!稍不留神就會導致程序崩潰、數據異常。本文整理15個高頻陷阱,助你寫出更穩健的代碼! ? 陷阱1:運算符優先級混淆? 問題:運算符優先級不同可能導
    的頭像 發表于 03-16 12:10 ?1779次閱讀