国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C語言13】結(jié)構(gòu)體的聲明,定義與結(jié)構(gòu)體的內(nèi)存對齊

這篇具有很好參考價值的文章主要介紹了【C語言13】結(jié)構(gòu)體的聲明,定義與結(jié)構(gòu)體的內(nèi)存對齊。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【C語言13】結(jié)構(gòu)體的聲明,定義與結(jié)構(gòu)體的內(nèi)存對齊,自我講解,c語言,開發(fā)語言

一、結(jié)構(gòu)體

1.1結(jié)構(gòu)體是什么

通俗的說,結(jié)構(gòu)體就是一個類的集合,如同整形數(shù)組是整形數(shù)字的集合體,結(jié)構(gòu)體也是一些值的集合,這些值稱為成員變量。結(jié)構(gòu)的每個成員可以是不同類型的變量。
如果我們要表達一本書,那么這本書的元素有什么呢,書的名字,書的作者,書的創(chuàng)作日期~,而c語言中內(nèi)置的集合不能很好的表達出來,這個時候,就可以使用結(jié)構(gòu)體來定義這本書。

1.2結(jié)構(gòu)體聲明

我們可以在創(chuàng)建結(jié)構(gòu)體時就為他創(chuàng)建變量名
如下:

struct Book
{
	char name[10];//自行定義的書的名字
	char author[10];//作者
	int year;//出版日期
}Mybook;//定義的這個結(jié)構(gòu)體的名字

也可以在主函數(shù)中創(chuàng)建這個變量名:

int main()
{
	struct Book Mybook2;
	return 0;
}

結(jié)構(gòu)體的變量同時也有著傳值和傳址兩種不同的傳參方式
傳值:

#include<stdio.h>
int main()
{
	struct Book Mybook2 = { "book","author","0708" };
	printf("%s %s %d", Mybook.name, Mybook2.author, Mybook2.year);
	return 0;
}

當使用傳值操作時,訪問這個結(jié)構(gòu)體應(yīng)該用.操作符
傳址:

void print(struct Book* book)
{
	printf("%s %s %d", book->name,book->author,book->year);
}
int main()
{
	struct Book Mybook2 = { "book","author","0708" };
	print(&Mybook2);
	return 0;
}

1.3結(jié)構(gòu)體的內(nèi)存

首先得掌握結(jié)構(gòu)體的對齊規(guī)則:

  1. 第一個成員在與結(jié)構(gòu)體變量偏移量為0的地址處。
  2. 其他成員變量要對齊到某個數(shù)字(對齊數(shù))的整數(shù)倍的地址處。
    對齊數(shù) = 編譯器默認的一個對齊數(shù) 與 該成員大小的較小值。
    VS中默認的值為8
    Linux中沒有默認對齊數(shù),對齊數(shù)就是成員自身的大小
  3. 結(jié)構(gòu)體總大小為最大對齊數(shù)(每個成員變量都有一個對齊數(shù))的整數(shù)倍。
  4. 如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對齊到自己的最大對齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整
    體大小就是所有最大對齊數(shù)(含嵌套結(jié)構(gòu)體的對齊數(shù))的整數(shù)倍。
    以圖文book為例
    【C語言13】結(jié)構(gòu)體的聲明,定義與結(jié)構(gòu)體的內(nèi)存對齊,自我講解,c語言,開發(fā)語言
    【C語言13】結(jié)構(gòu)體的聲明,定義與結(jié)構(gòu)體的內(nèi)存對齊,自我講解,c語言,開發(fā)語言
    計算運行結(jié)果
    【C語言13】結(jié)構(gòu)體的聲明,定義與結(jié)構(gòu)體的內(nèi)存對齊,自我講解,c語言,開發(fā)語言
    與我們計算的完全一致。
    那么為什么存在內(nèi)存對齊呢

平臺原因(移植原因):
不是所有的硬件平臺都能訪問任意地址上的任意數(shù)據(jù)的;某些硬件平臺只能在某些地址處取某些特
定類型的數(shù)據(jù),否則拋出硬件異常。

性能原因:
數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能地在自然邊界上對齊。
原因在于,為了訪問未對齊的內(nèi)存,處理器需要作兩次內(nèi)存訪問;而對齊的內(nèi)存訪問僅需要一次訪
問。

總體來說:
結(jié)構(gòu)體的內(nèi)存對齊是拿空間來換取時間的做法。文章來源地址http://www.zghlxwxcb.cn/news/detail-536212.html

以上便是結(jié)構(gòu)體的介紹,如有不足,請多多指正!

到了這里,關(guān)于【C語言13】結(jié)構(gòu)體的聲明,定義與結(jié)構(gòu)體的內(nèi)存對齊的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【C語言】自定義類型:結(jié)構(gòu)體深入解析(二)結(jié)構(gòu)體內(nèi)存對齊&&宏offsetof計算偏移量&&結(jié)構(gòu)體傳參

    【C語言】自定義類型:結(jié)構(gòu)體深入解析(二)結(jié)構(gòu)體內(nèi)存對齊&&宏offsetof計算偏移量&&結(jié)構(gòu)體傳參

    本小節(jié),我們學習結(jié)構(gòu)的內(nèi)存對齊,理解其對齊規(guī)則,內(nèi)存對齊包含結(jié)構(gòu)體的計算,使用宏 offsetof 計算偏移量,為什么要存在內(nèi)存對齊?最后了解結(jié)構(gòu)體的傳參文章干貨滿滿!學習起來吧??! 結(jié)構(gòu)體內(nèi)存對齊指的是 結(jié)構(gòu)體中各成員變量在內(nèi)存中的存儲位置按照一定規(guī)則對齊

    2024年02月04日
    瀏覽(22)
  • C語言結(jié)構(gòu)體的定義與使用

    參考:C語言指針 1.定義與使用 結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型,把不同類型的數(shù)據(jù)組合成一個整體 結(jié)構(gòu)體的定義形式: ??結(jié)構(gòu)體是一種集合,它里面包含了多個變量或數(shù)組,它們的類型可以相同,也可以不同,每個這樣的變量或數(shù)組都稱為結(jié)構(gòu)體的成員(Member)。請看下面的

    2024年02月05日
    瀏覽(16)
  • C語言之結(jié)構(gòu)體內(nèi)存對齊與內(nèi)存的簡單理解

    C語言之結(jié)構(gòu)體內(nèi)存對齊與內(nèi)存的簡單理解

    文章目錄 內(nèi)存單元的理解 結(jié)構(gòu)體中內(nèi)存對齊的規(guī)則 為什么會存在內(nèi)存對齊 首先先要介紹一下C語言中一些常見的存儲單元 ??? bit?????? 存放一個二進制位 ??? Byte?? 1Byte = 8 bit ??? KB???? 1KB?? = 1024 Byte ??? MB???? 1MB?? = 1024 KB ??? GB???? 1GB?? = 1024 MB ??? TB?

    2023年04月26日
    瀏覽(19)
  • C語言——結(jié)構(gòu)體類型(二)【結(jié)構(gòu)體內(nèi)存對齊,結(jié)構(gòu)體數(shù)組】

    C語言——結(jié)構(gòu)體類型(二)【結(jié)構(gòu)體內(nèi)存對齊,結(jié)構(gòu)體數(shù)組】

    ??前言: 上一講結(jié)構(gòu)體類型(一)中,我們講述了有關(guān) 結(jié)構(gòu)體定義,創(chuàng)建,初始化和引用 的內(nèi)容,這一講,我們進一步學習結(jié)構(gòu)體的相關(guān)知識: 1,結(jié)構(gòu)體內(nèi)存對齊 2,結(jié)構(gòu)體數(shù)組 ??個人簡介:努力學習ing ??個人專欄:C語言入門基礎(chǔ) ??CSDN主頁 愚潤求學 ??每日雞湯:

    2024年01月24日
    瀏覽(22)
  • 【C語言高階篇】結(jié)構(gòu)體 —— 什么是內(nèi)存對齊?

    【C語言高階篇】結(jié)構(gòu)體 —— 什么是內(nèi)存對齊?

    ?? 鴿芷咕 :個人主頁 ??? 個人專欄 :《C語言初階篇》 《C語言進階篇》 ??生活的理想,就是為了理想的生活! ?? ?? hello! 各位寶子們大家好啊,今天給大家?guī)淼氖墙Y(jié)構(gòu)體的內(nèi)存對齊這部分知識,可以說是干貨滿滿啦! ?? ?? 在我們C語言的面試題中,結(jié)構(gòu)體最

    2024年02月14日
    瀏覽(21)
  • 結(jié)構(gòu)體占用內(nèi)存大小如何確定?-->結(jié)構(gòu)體字節(jié)對齊 | C語言

    結(jié)構(gòu)體占用內(nèi)存大小如何確定?-->結(jié)構(gòu)體字節(jié)對齊 | C語言

    目錄 一、什么是結(jié)構(gòu)體 二、為什么需要結(jié)構(gòu)體 三、結(jié)構(gòu)體的字節(jié)對齊 3.1、示例1 3.2、示例2 3.3、示例3 ?3.4、示例4 3.5、示例5 四、結(jié)構(gòu)體字節(jié)對齊總結(jié) ????????結(jié)構(gòu)體是將不同類型的數(shù)據(jù)按照一定的功能需 求進行整體封裝,封裝的數(shù)據(jù)類型與大小均可以由用戶指定。 結(jié)

    2024年01月17日
    瀏覽(27)
  • 深入了解C語言中的結(jié)構(gòu)體類型與內(nèi)存對齊

    深入了解C語言中的結(jié)構(gòu)體類型與內(nèi)存對齊

    在C語言中,結(jié)構(gòu)體是一種 自定義的數(shù)據(jù)類型 , 它允許我們將不同類型的數(shù)據(jù)組合在一起,形成一個新的數(shù)據(jù)類型 。結(jié)構(gòu)體的使用為我們解決了一些復雜數(shù)據(jù)的表示和處理問題,不僅限于單單的整型或者字符。本文將深入探討結(jié)構(gòu)體類型、結(jié)構(gòu)體變量的創(chuàng)建和初始化,并詳

    2024年04月11日
    瀏覽(59)
  • C語言結(jié)構(gòu)體字節(jié)對齊(內(nèi)存對齊)之#pragma pack和__attribute__((packed)的使用

    C語言結(jié)構(gòu)體字節(jié)對齊(內(nèi)存對齊)之#pragma pack和__attribute__((packed)的使用

    在不使用 #pragma pack 和 __attribute__((packed) 等選項來自定義字節(jié)對齊大小的情況下,關(guān)于正常字節(jié)對齊的描述,可參考博文: C/C++計算類/結(jié)構(gòu)體和聯(lián)合體(union)所占內(nèi)存大?。▋?nèi)存對齊問題)_聯(lián)合體占用的內(nèi)存空間_SOC羅三炮的博客-CSDN博客 同學可以嘗試將char f 注釋,最后將

    2024年02月12日
    瀏覽(20)
  • 結(jié)構(gòu)體的使用和結(jié)構(gòu)體指針的定義注意事項

    結(jié)構(gòu)體的使用和結(jié)構(gòu)體指針的定義注意事項

    1、使用背景 ? ? ?由于想把不同地方的三個變量數(shù)據(jù)存放在一個結(jié)構(gòu)體中,并且調(diào)用W25QXX_Write((u8*)p,FLASH_SIZE-100,SIZE); //從倒數(shù)第100個地址處開始,寫入SIZE長度的數(shù)據(jù)。調(diào)用flash寫數(shù)據(jù)函數(shù),其參數(shù)為指針地址,于是需要定義一個結(jié)構(gòu)體和指向結(jié)構(gòu)體的指針,這樣調(diào)用flash寫函數(shù)

    2024年01月20日
    瀏覽(23)
  • 結(jié)構(gòu)體(結(jié)構(gòu)體內(nèi)存對齊)+位段+枚舉

    結(jié)構(gòu)體(結(jié)構(gòu)體內(nèi)存對齊)+位段+枚舉

    本期帶大家一起來學習一下 結(jié)構(gòu)體知識+位段知識+枚舉知識 ?????? 1.1 結(jié)構(gòu)體的聲明???? 1.1.1 結(jié)構(gòu)體的完全聲明?? 結(jié)構(gòu)體是一種自定義的類型,???? 結(jié)構(gòu)體是將不同類型的數(shù)據(jù)按照一定的功能需求進行整體封裝 ,封裝的數(shù)據(jù)類型與大小均可以由用戶指定。 那么又

    2023年04月10日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包