91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

你是否真的了解結(jié)構(gòu)體占用了多少字節(jié)?

信盈達 ? 2024-06-04 08:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

結(jié)構(gòu)體成員所占內(nèi)存空間大小

fd536da6-2205-11ef-bd4a-92fbcf53809c.png

一般情況下,如果想知道結(jié)構(gòu)體成員的內(nèi)存占用情況需要:

1、先用結(jié)構(gòu)體在內(nèi)存中開空間

2、使用sizeof(結(jié)構(gòu)體變量.成員名)或者sizeof(結(jié)構(gòu)體指針->成員名)的形式獲取成員在內(nèi)存中所占空間大小,舉例如下:

#include#include
typedef struct{ int id; char ch;}data;
int main(){ data a; // 結(jié)構(gòu)體變量 data *p = (data *)malloc(sizeof(data));
// 結(jié)構(gòu)體變量用點語法 printf("方式一:成員id大?。?d,ch大?。?d\n", sizeof(a.id),sizeof(a.ch));
// 結(jié)構(gòu)體指針用 -> printf("方式二:成員id大?。?d,ch大?。?d\n", sizeof(p->id),sizeof(p->ch));
return 0;}

此方法需要在內(nèi)存中開辟空間。

fd56d5c2-2205-11ef-bd4a-92fbcf53809c.png

在閱讀源碼的時候偶然發(fā)現(xiàn)了一種非常妙的寫法:可以將結(jié)構(gòu)體指針強制指向地址為0的區(qū)域,然后直接用sizeof訪問成員。

printf("方法三:成員id大?。?d,ch大?。?d\n", sizeof(((data *)0)->id),sizeof(((data *)0)->ch));

地址為0的區(qū)域為保留區(qū),程序運行時并不會真正在內(nèi)存中開空間,這里可以理解為借用了0值。

為了通用,可以將這種方法進行宏定義:

#define size_of_attribute(Struct, Attribute) sizeof(((Struct*)0)->Attribute)

Struct --- 結(jié)構(gòu)體類型名字

Attribute--- 結(jié)構(gòu)體成員名測試代碼如下,你也快去試一下吧!

#include#include
#define size_of_attribute(Struct, Attribute) sizeof(((Struct*)0)->Attribute)
typedef struct{ int id; char ch;}data;
typedef struct{ double d; short m;}data2;
int main(){ printf("%d\n",size_of_attribute(data,ch)); printf("%d\n",size_of_attribute(data2,d)); return 0;}

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

    關(guān)注

    9

    文章

    3209

    瀏覽量

    76358
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    685

    瀏覽量

    31317
  • 結(jié)構(gòu)體
    +關(guān)注

    關(guān)注

    1

    文章

    131

    瀏覽量

    11371
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    變頻器是否真的省電?

    變頻器作為一種電力電子設(shè)備,在現(xiàn)代工業(yè)生產(chǎn)和民用領(lǐng)域中廣泛應(yīng)用,其核心功能是通過調(diào)節(jié)電機工作頻率來實現(xiàn)轉(zhuǎn)速控制。關(guān)于“變頻器是否真的省電”這一問題,需要從技術(shù)原理、應(yīng)用場景以及實際效果三個維度綜合分析,才能得出客觀結(jié)論。
    的頭像 發(fā)表于 02-27 17:00 ?284次閱讀

    小藝開放平臺快速創(chuàng)建鴻蒙智能

    與預(yù)覽工具體驗當前智能的實際效果,來幫助我們進行智能的問題定位和優(yōu)化改進。 創(chuàng)建智能時,開場對話可以讓用戶快速了解的智能
    發(fā)表于 01-19 11:00

    10個例子代碼,C語言結(jié)構(gòu)的高級

    (\"Flag 3: %dn\", f.flag3); return 0; } 在這個例子中,我們使用了位字段來定義一個結(jié)構(gòu),其中每個成員變量都指定了所占用的位數(shù)。這樣
    發(fā)表于 01-05 06:32

    一個經(jīng)典的結(jié)構(gòu)和聯(lián)合體共用的實例

    結(jié)構(gòu) 結(jié)構(gòu)占用的內(nèi)存大小,首先和編譯器的系統(tǒng)位數(shù)有關(guān)系,類似于CPU是 64 bits 還是 32 bits 的情形;其次,
    發(fā)表于 12-16 07:14

    結(jié)構(gòu)聲明與定義

    一樣,去聲明我們的結(jié)構(gòu)體操作,但是C語言中規(guī)定,聲明結(jié)構(gòu)變量的時候,struct關(guān)鍵字是不可少的。 struct 結(jié)構(gòu)類型名
    發(fā)表于 12-11 07:52

    typedef結(jié)構(gòu)使用

    雖然結(jié)構(gòu)的出現(xiàn)能夠讓我們有一個更科學(xué)的數(shù)據(jù)結(jié)構(gòu)來管理數(shù)據(jù),但是每次使用結(jié)構(gòu)都需要struct...,未免顯得有些冗長和麻煩。有了type
    發(fā)表于 12-08 07:04

    為什么不建議用匿名結(jié)構(gòu)

    說起匿名結(jié)構(gòu),想必大家第一感覺就是看著好高大上的名字,但實際上也就那樣。 typedef struct { union { struct { uint8_t bit_0:1
    發(fā)表于 12-04 07:39

    網(wǎng)絡(luò)接口:數(shù)字世界的“門鈴”,了解多少?

    插上網(wǎng)線,連接Wi-Fi,可曾想過數(shù)據(jù)是如何在網(wǎng)絡(luò)世界穿梭的?今天,讓我們一起揭開網(wǎng)絡(luò)接口的神秘面紗! 是否曾好奇,當我們插上網(wǎng)線或連接Wi-Fi時,數(shù)據(jù)是如何在網(wǎng)絡(luò)世界中穿梭的?這一切都離不開
    發(fā)表于 11-26 18:53

    網(wǎng)絡(luò)通訊的結(jié)構(gòu)及地址

    1. 網(wǎng)絡(luò)地址結(jié)構(gòu) Socket通過結(jié)構(gòu)描述網(wǎng)絡(luò)地址,最常用的是IPv4地址結(jié)構(gòu)sockaddr_in(定義在): struct sockaddr_in
    發(fā)表于 11-17 07:59

    C語言結(jié)構(gòu)使用

    有時候需要將不同類型的數(shù)據(jù)組合為一個整體,以便于引用。例如,一名學(xué)生有學(xué)號、姓名、性別、年齡等屬性,如果針對每個屬性都單獨定義一個變量,那么當有多名學(xué)生時變量就難以分清。結(jié)構(gòu)就是用來管理不同類
    發(fā)表于 11-12 08:30

    干擾可以提高測量精度,是真的嗎?

    一、前言 水可以引燃蠟燭,是真的嗎?是真的! 蛇怕雄黃,是真的嗎?是假的! 上述兩個現(xiàn)象,已經(jīng)由央視 財經(jīng)頻道《是真的嗎?》揭秘。 今天要探討的是: 干擾可以提高測量精度,是
    的頭像 發(fā)表于 08-04 09:28 ?700次閱讀
    干擾可以提高測量精度,是<b class='flag-5'>真的</b>嗎?

    定義IO初始化結(jié)構(gòu)

    由上述IOPORT相關(guān)功能的枚舉類型我們可以知道,在對IOPORT模塊進行初始化時需要根據(jù)情況配置它們。因此我們定義一個IOPORT初始化的結(jié)構(gòu)類型IOPORT_Init_t,它的成員包括了由上述所有枚舉類型所聲明的變量,因此該結(jié)構(gòu)
    的頭像 發(fā)表于 07-16 16:26 ?1407次閱讀

    滲壓計在混凝土結(jié)構(gòu)中的安裝指南

    在現(xiàn)代土木工程和巖土工程中,滲壓計是監(jiān)測混凝土結(jié)構(gòu)體內(nèi)孔隙水壓力變化的重要工具。南京峟思公司生產(chǎn)的滲壓計因其高精度和可靠性而被廣泛應(yīng)用于各種工程監(jiān)測項目中。一、滲壓計在混凝土結(jié)構(gòu)中的應(yīng)用價值滲壓計
    的頭像 發(fā)表于 05-28 10:55 ?596次閱讀
    滲壓計在混凝土<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>體</b>中的安裝指南

    充電接口真的了解嗎?

    USB(Universal Serial Bus,通用串行總線)自1994年誕生以來,已成為我們?nèi)粘I钪胁豢苫蛉钡慕涌跇藴?。從鍵盤、鼠標到手機、充電寶,USB接口無處不在。但知道USB接口也有
    的頭像 發(fā)表于 05-18 17:39 ?4510次閱讀

    C語言中結(jié)構(gòu)與聯(lián)合體的深度解析:內(nèi)存布局與應(yīng)用場景

    int value; // 4字節(jié) }; // 寫入arr[0]=\'A\'后,value的二進制表示為0x41 三、實戰(zhàn)代碼深度剖析 3.1 結(jié)構(gòu)應(yīng)用場景 typedef struct
    發(fā)表于 04-08 09:18