精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

哦!數組還能這么用,學到了!

開發 后端
即結構體的最后一個成員,可以不完整類型(一種缺乏足夠的信息去描述一個完整對象的類型)的數組,但它使得整個結構體的大小就像沒有這個成員一樣。

這個問題源于讀者在閱讀redis源碼時的一個疑問。

先看下面的代碼,對于包含動態字符串成員的兩個結構體Test0和Test1占用空間分別是多少呢? 

  1. //來源:公眾號【編程珠璣】  
  2. //作者:守望先生  
  3. #include<stdio.h>  
  4. struct Test0  
  5.  
  6.     int a;  
  7.     int b;  
  8.     char *c;  
  9. };  
  10. struct Test1  
  11.  
  12.     int a;  
  13.     int b;  
  14.     char c[];  
  15. };  
  16. int main(void)  
  17.  
  18.     printf("sizeof(struct Test0) = %zd\n",sizeof(struct Test0));  
  19.     printf("sizeof(struct Test1) = %zd\n",sizeof(struct Test1));  
  20.     return 0;  

很多讀者一眼就能看出來,在64位系統上,編譯為64位程序,其輸出結果為: 

  1. 16  

對于Test0的結果是16,通常沒有什么疑問,畢竟4(int)+4(int)+8(指針)= 16,但是對于后者的結構體占用空間為8字節,有的讀者可能會有疑問。(關于字節對齊,參考《字節對齊,看這篇就懂了》)

柔性數組(flexible array)

實際上這是在C99中引入的柔性數組的特性。即結構體的最后一個成員,可以不完整類型(一種缺乏足夠的信息去描述一個完整對象的類型)的數組,但它使得整個結構體的大小就像沒有這個成員一樣。但是呢,當用結構體通過這個名字訪問這個成員時,就像訪問一個普通數組成員一樣。

如果數組最終一個元素都沒有的話,那么訪問這個數組將會是未定義行為了。

正如我們前面所看到的: 

  1. struct Test1  
  2.  
  3.     int a;  
  4.     int b;  
  5.     char c[];  
  6. }; 

成員c是一個數組,但是并沒有指定大小,使用sizeof計算Test1,其占用空間也僅僅是8字節。

有什么好處?

那么使用柔性數組有什么好處呢?

內存申請和釋放

假設分別使用兩種類型的結構體,存儲16字節的字符數據,需要申請內存。對于struct Test0: 

  1. strcut Test0 *t0 = malloc(sizeof(struct Test0));//為結構體申請內存  
  2. t0->c = malloc(sizeof(char) * 16);//為成員指向的數據申請內存 

而對于struct Test1: 

  1. strcut Test1 *t1 = malloc(sizeof(struct Test1) + sizeof(char) * 16); 

看出區別了嗎?前者需要兩次內存申請,而后者只需要一次。前者地址不連續(兩次malloc),后者地址連續。而你訪問成員c的時候,只需要下面這樣就可以:

t1->c,和普通成員無異。

要判斷它們的地址是否連續也非常簡單,只需要分別打印b和c的地址就可以了。

和內存釋放類似,前面需要單獨釋放成員c申請的內存,而后者可以一起釋放。

數據拷貝

正由于前面的差別,導致數據拷貝時,更有區別。

對于struct Test0: 

  1. //memcpy(t0copy,t0,sizeof(struct Test0));//不可,這樣直接t0copy的c和t0的c指向同一片內存區域。  
  2. t0t0copy.a = t0.a;  
  3. t0t0copy.b = t0.b;  
  4. memcpy(t0copy.c,t0.c,sizeof(char)*16); 

這里無法一次拷貝,因為它的成員c是一個指針類型,我們需要的是一份完整拷貝,因此必須拷貝它指向的內存。(參考《結構體成員賦值到底是深拷貝還是淺拷貝?》)

但是對于struct Test1: 

  1. memcpy(t0copy,t0,sizeof(strcut Test1) + sizeof(char) * 16); 

在這里,由于柔性數組的內存,它的數據內容和結構體數據成員的地址是連續的,因此可以直接拷貝。

減少內存碎片

由于結構體的柔性數組和結構體成員的地址是連續的,即可一同申請內存,因此更大程度地避免了內存碎片。另外由于該成員本身不占結構體空間,因此,整體而言,比普通的數組成員占用空間要會稍微小點。

零長數組

與柔性數組功能類似,還有一個0長數組,不過它并不是標準中的,但是它可以實現類似的功能,使用方式如下: 

  1. struct Test1  
  2.  
  3.     int a;  
  4.     int b;  
  5.     char c[0];  
  6. }; 

差別在于使得數組長度為0。但是由于它并非C標準中的,因此從可移植性考慮,不建議使用這種方式,除非你還無法使用C99。

總結

柔性數組的使用:

  •  位于結構體最后一個位置
  •  不完整數組類型
  •  不是唯一成員

最后,放張圖,看差別:

普通和柔性數組

 

 

責任編輯:龐桂玉 來源: C語言與C++編程
相關推薦

2017-03-17 13:40:48

思科視頻

2021-08-29 18:13:03

緩存失效數據

2021-11-22 11:05:20

Vue 3setup前端

2020-07-21 18:54:21

Rust類型轉換語言

2022-10-28 19:19:11

ChromeNetwork網絡

2019-03-28 11:07:56

Spring BootRedis緩存

2023-10-16 08:55:43

Redisson分布式

2013-03-26 13:26:41

婚禮微信微信公眾賬號

2022-02-14 21:58:58

netstatLinuxWindows

2021-03-09 09:55:02

Vuejs前端代碼

2023-04-10 07:40:36

GraphQLRest通信模式

2022-10-31 08:47:21

人臉識別按鍵鍵盤

2022-07-19 08:04:04

HTTP應用層協議

2023-06-03 00:05:18

TypeScriptJSDoc掃描器

2024-11-13 09:22:40

2020-05-09 16:45:56

ping命令Linux

2024-04-12 08:54:13

從庫數據庫應用

2021-09-03 06:46:34

MyBatis緩存后端

2010-01-20 10:37:48

Chrome瀏覽器

2019-12-30 09:51:35

Word設計模式軟件
點贊
收藏

51CTO技術棧公眾號

欧美一区二区三区色| 91蜜桃在线观看| 欧美福利视频在线观看| 日本护士做爰视频| 少妇精品视频一区二区免费看| 综合色天天鬼久久鬼色| 国产亚洲欧美一区二区| 最新中文字幕第一页| 国产主播一区| 色777狠狠综合秋免鲁丝| 日本人妻一区二区三区| 欧美www.| 亚洲一区二区三区免费视频| 午夜精品区一区二区三| 免费观看黄色av| 久久成人免费网| 55夜色66夜色国产精品视频| 99久久婷婷国产综合| 欧美日韩高清| 亚洲福利视频网| 日韩成人av免费| 日韩三级影视| 亚洲电影在线免费观看| 中文字幕一区二区三区最新| 日韩av视屏| 国产成人99久久亚洲综合精品| 国产精品精品一区二区三区午夜版| 久久老司机精品视频| 日韩欧美大片| 亚洲香蕉成人av网站在线观看| 无码人妻一区二区三区免费n鬼沢| 国产第一亚洲| 色婷婷久久99综合精品jk白丝| 欧美人成在线观看| 超碰超碰在线| 亚洲日本韩国一区| 日韩免费av电影| 青青草观看免费视频在线 | 亚洲欧美综合网| 在线免费观看视频一区| 国产精品久久9| 毛片毛片女人毛片毛片| 一区三区视频| 欧美精品电影在线| www青青草原| 综合一区二区三区| 上原亚衣av一区二区三区| 偷拍夫妻性生活| 一本色道久久综合亚洲精品酒店| 亚洲国产精品yw在线观看| 少妇熟女视频一区二区三区 | 一区二区黄色| 韩国精品久久久999| 国产亚洲精品女人久久久久久| 欧美99在线视频观看| 两个人的视频www国产精品| 香蕉久久久久久久| 日韩视频在线观看| 色噜噜久久综合伊人一本| 亚洲色图第四色| 久久密一区二区三区| 日韩中文字幕在线观看| 午夜激情视频在线播放| 亚洲精品97| 欧美成人免费一级人片100| 欧美日韩一级大片| 亚洲视频免费| 欧美一级片一区| 欧美高清69hd| 国产乱淫av一区二区三区| 不卡视频一区二区| 天堂8在线视频| 国产视频一区在线观看| 亚洲欧美成人一区| 在线中文字幕视频观看| 亚洲国产sm捆绑调教视频| 国产一区二区视频播放| 韩日成人影院| 在线电影一区二区三区| av不卡中文字幕| 日韩手机在线| 午夜久久tv| 亚洲精品一区二区久| 蜜桃无码一区二区三区| 国产精品国产一区| 欧美韩国理论所午夜片917电影| 日本熟妇毛茸茸丰满| 美女精品网站| 亚洲xxxx在线| 日韩一区二区三区中文字幕| 国产精品亲子乱子伦xxxx裸| 国产a级黄色大片| 成人美女大片| 欧美一级夜夜爽| 不卡一区二区在线观看| 色综合色综合| 97av在线视频| 国产精品无码天天爽视频| 成人av免费在线观看| 色噜噜狠狠一区二区三区| 中文在线观看免费| 在线免费不卡电影| 色诱av手机版| 日韩中文首页| 26uuu另类亚洲欧美日本一| 91精品中文字幕| 91丨九色porny丨蝌蚪| 伊人狠狠色丁香综合尤物| 国产福利片在线观看| 欧美日韩成人综合| 搡老熟女老女人一区二区| 伊人色**天天综合婷婷| 国产福利成人在线| 成人乱码一区二区三区| 中文字幕亚洲在| 免费av网址在线| jizz性欧美23| 久久久精品在线观看| 免费看一级视频| 成人高清免费观看| 激情五月五月婷婷| 成人国产在线| 精品国产sm最大网站免费看| 国产男女猛烈无遮挡在线喷水| 免费在线日韩av| 国产精品视频免费观看| 国产写真视频在线观看| 欧美色手机在线观看| 深爱五月激情网| 国产精品一二| 国产精品福利视频| 亚洲男同gay网站| 在线成人免费视频| 成人免费视频入口| 日韩电影在线看| 久久国产精品高清| av网站大全在线| 国产精品一区一区| 伊人久久青草| 国产成人精品一区二区三区免费 | 日本人69视频| 国产亚洲一卡2卡3卡4卡新区| 91精品国产乱码久久久久久久久 | 亚洲欧美日韩一区二区三区在线| 国产午夜精品一区二区理论影院 | 欧美色综合影院| b站大片免费直播| 美女久久一区| 欧美亚洲丝袜| 朝桐光一区二区| 一本色道久久综合狠狠躁篇的优点| 青青青国产在线| 久久先锋影音av| 国产精品久久久久9999小说| 综合亚洲色图| 国产成人精品在线播放| 国产高清视频免费最新在线| 欧美这里有精品| 欧美xxxooo| 国产一区二区在线免费观看| 永久免费看av| 国产精品巨作av| 欧美诱惑福利视频| 国产视频二区在线观看| 欧美系列亚洲系列| 成人免费精品动漫网站| 国产一区二区免费视频| 91国在线高清视频| 国产精品网址| 国产成人综合亚洲| 免费黄色在线观看| 欧美mv和日韩mv国产网站| 日本少妇激情舌吻| 久久只精品国产| 天天干天天草天天| 欧美激情综合| 欧美日韩大片一区二区三区| 国产福利一区二区三区在线播放| 毛片精品免费在线观看| 天堂8在线视频| 欧美网站一区二区| www.99re7| 久久综合狠狠综合| 99日在线视频| 一区二区国产精品| 在线观看免费91| 精品精品国产毛片在线看| 国产999在线| 91麻豆一二三四在线| 亚洲国产欧美自拍| 中文字幕欧美在线观看| 亚洲一区在线观看网站| 亚洲一区视频在线播放| 国产精品1区二区.| 国产一级片黄色| 在线国产一区| 日本成人黄色| 视频成人永久免费视频| 欧美在线不卡区| gogo在线高清视频| 亚洲男人天堂久| www.成人精品| 欧美三区在线观看| 欧美成人aaaaⅴ片在线看| 欧美激情一区二区三区在线| avtt中文字幕| 麻豆久久久久久久| 精品一区二区中文字幕| 欧美一区二区| 亚洲一卡二卡三卡| 四虎884aa成人精品最新| 91免费欧美精品| 欧美动物xxx| 久久久久久综合网天天| 日韩av中文| 亚洲欧洲在线看| 成人午夜福利视频| 在线成人av网站| 精品一区二三区| 午夜精品久久久久久久99水蜜桃| 国产黄a三级三级| 久久精品免费在线观看| 影音先锋资源av| 国产精品夜夜嗨| 在线观看免费视频高清游戏推荐| 性高湖久久久久久久久| 国产精品久久久久久久乖乖| 午夜日韩在线| 中文字幕成人一区| 日本久久一二三四| 日韩电影免费观看在| 国内视频在线精品| 国产高清自拍99| 2021年精品国产福利在线| 亚洲一区中文字幕| 久久国际精品| 亚洲精品免费在线视频| 成人av在线播放| 91久久精品国产91久久| 国产精品原创视频| 国产一区二区在线免费| 国产精品99| 国产精品中文在线| 六九午夜精品视频| 国产精品一久久香蕉国产线看观看| 日韩免费小视频| 国产精品第七十二页| 成人黄色免费短视频| 日产日韩在线亚洲欧美| 综合在线影院| 国产精品久久二区| 成人国产激情| 91热福利电影| 97色成人综合网站| 国产日韩精品推荐| 日韩啪啪网站| 色综合久久久久久久久五月| 日韩理论电影大全| av电影一区二区三区| 国产综合欧美| 国产视频一视频二| 丝袜a∨在线一区二区三区不卡| 精品国产成人av在线免| 日本不卡123| 色播五月激情五月| 国产黄色91视频| 亚洲一区二区三区四区av| 99热精品国产| 性欧美一区二区| 中文字幕在线观看一区二区| 在线免费日韩av| 精品久久久久久| 国产精品xxxxxx| 欧美一区二区三区免费大片| 黄色福利在线观看| 精品调教chinesegay| 95在线视频| 欧美区在线播放| 亚洲深夜视频| 国产在线视频91| 国产成人福利av| 日韩少妇中文字幕| 欧美a级在线| 日本在线观看a| 狠狠狠色丁香婷婷综合激情| 国产综合内射日韩久| 久久精品人人爽人人爽| 亚洲色图综合区| 精品国产乱码久久久久久婷婷| 中文字幕日产av| 精品国产凹凸成av人网站| av网站在线免费观看| 欧美激情综合亚洲一二区| 日日av拍夜夜添久久免费| 亚洲综合小说区| 久久不卡国产精品一区二区| 色乱码一区二区三区熟女 | 国产又猛又黄的视频| 国产精品一二三四| 亚洲区自拍偷拍| 亚洲国产aⅴ天堂久久| 在线观看色网站| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 麻豆国产va免费精品高清在线| а√在线中文在线新版| 国产一区二区丝袜| 亚洲妇女av| 天天做天天躁天天躁| 秋霞午夜av一区二区三区| 中国黄色片视频| 自拍偷在线精品自拍偷无码专区 | 欧美精品一区二区三区在线看午夜| 99久久综合| 久久精品视频91| av高清久久久| 黄色片在线观看网站| 欧美性高清videossexo| 四虎成人免费在线| 欧美黄色片视频| 国产一区一区| 亚洲开发第一视频在线播放| 欧美亚洲一区二区三区| 亚洲区 欧美区| 亚洲欧洲精品成人久久奇米网| 无码人妻丰满熟妇区bbbbxxxx| 亚洲成人av在线播放| 性国产高清在线观看| 成人xvideos免费视频| 国产一区二区电影在线观看| 免费毛片小视频| 成人国产在线观看| 麻豆91精品91久久久| 777午夜精品视频在线播放| 超碰免费在线| 国产va免费精品高清在线| 色天下一区二区三区| 极品美女扒开粉嫩小泬| 成人h版在线观看| 久久中文字幕无码| 欧美一区国产二区| 哥也色在线视频| 91麻豆桃色免费看| 天天做天天爱综合| 欧美一级特黄aaa| 亚洲婷婷综合久久一本伊一区 | 欧美精品一区视频| 欧美aaa免费| 国产精品日韩欧美一区二区| 韩国av一区| 伊人网综合视频| 婷婷久久综合九色综合绿巨人| 黄色一级大片在线免费看国产| 欧美激情视频一区| 成人黄色av网址| 大陆极品少妇内射aaaaa| 久久新电视剧免费观看| 成人午夜精品视频| 精品国产一区二区三区久久久 | 午夜伦理福利在线| 老牛影视免费一区二区| 久久婷婷丁香| 日本成人免费在线观看| 欧美精品三级日韩久久| caopo在线| 精品久久久三级| 日日夜夜精品视频免费| 粉嫩精品久久99综合一区| 在线不卡的av| 蜜臀av在线| 久久久久网址| 久久精品国产免费| 久久成人国产精品入口| 亚洲激情久久久| 欧美暴力调教| 日韩精品第1页| 99热精品一区二区| 欧美激情一区二区三区免费观看| 久久亚洲春色中文字幕| 久久中文资源| 亚洲免费看av| 亚洲一卡二卡三卡四卡| 日本福利片高清在线观看| 国产精品一区久久久| 亚洲无线视频| 中文字幕免费看| 欧美一二三区在线观看| 日本蜜桃在线观看视频| 亚洲精品9999| 成人动漫一区二区| 伊人久久亚洲综合| 久久久综合av| 日本不卡电影| 色综合久久五月| 欧美日韩激情在线| 超碰在线视屏| 中文字幕成人一区| 2020国产精品自拍| 99久久久国产精品无码网爆| 热久久视久久精品18亚洲精品| 99视频精品视频高清免费|