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

那些年我們踩過的坑:C 語言柔性數組其實超簡單!

開發
今天咱們來聊一個看起來高大上,其實超級實用的 C 語言知識點——柔性數組。

大家好啊,我是小康。

今天咱們來聊一個看起來高大上,其實超級實用的 C 語言知識點——柔性數組。

別被這個名字唬住,啥叫"柔性"?簡單說就是大小可變、長度不固定的數組。學會這招,分分鐘提升你的程序設計水平!

一、啥是柔性數組?先別慌!

你肯定用過普通數組吧?比如:int nums[10]。這種數組大小一旦定了就是10個元素,多一個少一個都不行,死板得很!

而柔性數組是啥呢?它是 C99 標準引入的一個神奇特性,允許我們在結構體的最后聲明一個大小未知的數組。是不是聽著很玄乎?別著急,看完你就懂了!

二、柔性數組長啥樣?

struct FlexArray {
    int length;     // 記錄數組長度
    double scores[]; // 這就是柔性數組!注意這里沒寫大小
};

看到了嗎?這個scores數組后面的中括號是空的!這就是柔性數組的寫法。它必須是結構體的最后一個成員,前面必須至少有一個其他成員(通常用來記錄數組的實際長度)。

三、為啥要用柔性數組?有啥好處?

想象一下這個場景:你要管理不同學生的成績,有的學生選了 3 門課,有的選了 8 門課。用普通數組咋辦?

方法一:定一個夠大的數組,比如:

struct Student {
    int id;
    int courseCount;
    double scores[30]; // 寫死30個,夠大就行
};

// 使用方式
struct Student xiaoming;
xiaoming.id = 1001;
xiaoming.courseCount = 5;
xiaoming.scores[0] = 85.5;
// ...

問題來了,太浪費空間了!小明只選了 5 門課,但我們卻給他預留了 30 門課的空間。而且,萬一有學霸選了超過 30 門課呢?改代碼重新編譯?這也太麻煩了!

方法二:用指針和動態內存,比如:

struct Student {
    int id;
    int courseCount;
    double *scores; // 指針,指向另一塊內存
};

// 使用方式
struct Student *xiaoming = (struct Student*)malloc(sizeof(struct Student));
xiaoming->id = 1001;
xiaoming->courseCount = 5;

// 再分配一次內存給成績數組
xiaoming->scores = (double*)malloc(5 * sizeof(double));
xiaoming->scores[0] = 85.5;
// ...

// 釋放內存時要記得釋放兩次!
free(xiaoming->scores); // 先釋放數組
free(xiaoming);         // 再釋放結構體

這種方式雖然靈活,但每次都要分兩次申請內存:一次給結構體,一次給 scores 指向的數組。 內存不連續,訪問效率低,而且容易忘記釋放內存(特別是那個 scores 指針指向的內存,很多人只釋放了結構體,忘了釋放數組,造成內存泄漏)。

這時候,柔性數組就顯得特別聰明了!

四、柔性數組是怎么用的?實戰來了!

#include <stdio.h>
#include <stdlib.h>

// 定義一個帶柔性數組的結構體
struct Student {
    int id;          // 學號
    int courseCount; // 課程數量
    double scores[]; // 柔性數組,存儲成績
};

int main() {
    int courses = 5; // 小明選了5門課
    
    // 計算需要的總內存:結構體固定部分 + 柔性數組部分
    struct Student *xiaoming = (struct Student*)malloc(sizeof(struct Student) + courses * sizeof(double));
    
    // 初始化小明的信息
    xiaoming->id = 1001;
    xiaoming->courseCount = courses;
    
    // 設置小明的5門課成績
    xiaoming->scores[0] = 85.5; // 數學
    xiaoming->scores[1] = 92.0; // 英語
    xiaoming->scores[2] = 78.5; // 物理
    xiaoming->scores[3] = 96.0; // 化學
    xiaoming->scores[4] = 88.5; // 生物
    
    // 計算平均分
    double sum = 0;
    for (int i = 0; i < xiaoming->courseCount; i++) {
        sum += xiaoming->scores[i];
    }
    
    printf("學號%d的小明平均分是:%.2f\n", xiaoming->id, sum / xiaoming->courseCount);
    
    // 釋放內存,只需要free一次!
    free(xiaoming);
    
    return0;
}

運行結果:

學號1001的小明平均分是:88.10

五、柔性數組的內存布局,一圖看懂!

假設我們有這樣的結構體:

struct FlexArray {
    int length;
    double scores[];
};

內存中的樣子大概是:

+-------------+-------------+-------------+-------------+
| length (4B) | scores[0]   | scores[1]   | scores[2]   | ...
+-------------+-------------+-------------+-------------+
               ↑
        柔性數組的起始位置

所有數據都在一塊連續的內存中,訪問超快,而且只需要分配和釋放一次內存!

六、柔性數組的注意事項(踩坑警告??)

必須放在結構體最后:柔性數組必須是結構體的最后一個成員。

至少有一個其他成員:結構體中必須有至少一個其他成員(通常用來記錄柔性數組的長度)。

不占結構體大小:柔性數組不計入結構體的 sizeof 大小。

struct Test {
    int n;
    int arr[];
};

printf("結構體大小:%zu\n", sizeof(struct Test)); // 輸出:結構體大小:4

不能直接定義變量:不能直接定義結構體變量,必須用指針和動態內存。

// 錯誤寫法
struct Test t;  // 不行!柔性數組沒地方存
               // 注意:雖然在 VS2022 等現代編譯器中可能編譯通過
               // 但這是不規范的,柔性數組沒有實際存儲空間,使用會導致內存越界!

// 正確寫法
struct Test *pt = (struct Test*)malloc(sizeof(struct Test) + 10 * sizeof(int));

七、柔性數組vs指針成員,差別在哪?

有人可能會問:用結構體里的指針成員不也能實現類似功能嗎?

struct WithPointer {
    int length;
    int *data;  // 指針成員
};

struct WithFlexible {
    int length;
    int data[]; // 柔性數組
};

區別大了去了:

  • 內存布局:柔性數組的數據緊跟在結構體后面,是一塊連續內存;指針方式數據在另一個地方,是兩塊不連續的內存。
  • 內存操作次數:柔性數組只需要分配和釋放一次內存;指針方式需要分配和釋放兩次。
  • 訪問效率:柔性數組訪問更快,內存連續,對 CPU 緩存更友好。
  • 代碼簡潔度:柔性數組代碼更簡潔,不容易出現忘記釋放內存的問題。

八、實戰案例:實現一個簡單的動態字符串

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedefstruct {
    size_t length;  // 字符串長度
    char data[];    // 柔性數組
} MyString;

// 創建字符串
MyString* createString(const char* text) {
    size_t len = strlen(text);
    
    // 分配內存:結構體大小 + 字符串長度 + 1(給'\0'留位置)
    MyString* str = (MyString*)malloc(sizeof(MyString) + len + 1);
    
    str->length = len;
    strcpy(str->data, text);  // 復制字符串內容
    
    return str;
}

// 打印字符串
void printString(const MyString* str) {
    printf("長度: %zu, 內容: %s\n", str->length, str->data);
}

int main() {
    // 創建一個字符串
    MyString* hello = createString("Hello, 柔性數組!");
    
    // 打印字符串信息
    printString(hello);
    
    // 內存釋放,只需要一次free
    free(hello);
    
    return0;
}

運行結果:

長度: 16, 內容: Hello, 柔性數組!

總結:柔性數組到底香在哪?

  • 內存連續:數據緊湊,訪問效率高
  • 一次分配:避免多次 malloc/free,減少內存碎片
  • 一次釋放:不容易造成內存泄漏
  • 靈活方便:可以根據需要分配剛好夠用的內存

是不是感覺 C 語言突然變得更強大了?柔性數組這個小技巧,在很多底層庫和系統編程中都有廣泛應用,比如 Linux 內核中就大量使用了這個技術。

好了,今天的 C 語言小課堂到此結束!下次我們再聊其他有趣的編程技巧。

掌握了柔性數組這個小技巧,是不是感覺自己的 C 語言技能又升級了?

寫在最后:技術成長沒有"固定數組"

就像柔性數組一樣,我們的學習之路也不該限定死板的大小。從 C 語言基礎到高級技巧,從編程小白到技術大牛,每個階段都需要不同"長度"的知識儲備。

責任編輯:趙寧寧 來源: 跟著小康學編程
相關推薦

2024-04-01 08:05:27

Go開發Java

2025-05-26 02:22:00

2023-12-21 11:46:48

C語言柔性數組開發

2025-10-16 08:10:59

2017-07-17 15:46:20

Oracle并行機制

2020-11-18 10:16:23

人工智能機器學習技術

2025-04-03 12:30:00

C 語言隱式類型轉換代碼

2018-01-10 13:40:03

數據庫MySQL表設計

2025-11-06 02:55:00

2019-02-19 09:46:58

美圖容器化Kubernetes

2019-04-18 11:43:40

軟件卸載PC端

2020-05-18 08:58:33

Python開發工具

2024-05-06 00:00:00

緩存高并發數據

2015-03-24 16:29:55

默認線程池java

2020-03-18 14:28:43

偽概念手機真相

2021-12-28 08:17:41

循環 forgo

2025-04-29 10:17:42

2022-07-06 11:47:27

JAVAfor循環

2018-09-11 09:14:52

面試公司缺點

2023-03-13 13:36:00

Go擴容切片
點贊
收藏

51CTO技術棧公眾號

91中文字幕永久在线| 在线观看18视频网站| 波多野结衣av无码| 久久神马影院| 欧美一级一区二区| 人妻少妇精品久久| 国产日本在线| 国产综合一区二区| 欧美高清视频在线| 久久中文字幕人妻| 三级成人在线| 亚洲综合久久久久| 日韩精品久久一区二区三区| 一级片aaaa| 一区二区三区福利| 免费在线国产视频| 欧美精品激情| 亚洲色图色老头| 91插插插影院| 亚洲黄色网址| 一区二区成人在线| 亚欧精品在线| 香蕉av一区二区三区| 久久97超碰色| 日本一本a高清免费不卡| 欧美黄色aaa| 精品美女视频| 亚洲加勒比久久88色综合| 欧美成年人视频在线观看| 538在线观看| 国产午夜精品一区二区三区四区| 5g国产欧美日韩视频| 国产精品人人人人| 在线国产精品一区| 免费91麻豆精品国产自产在线观看| 性欧美成人播放77777| 日韩欧洲国产| 欧美日韩一区二区三区四区| 久久久久久久久久网| 国产在线看片| 国产精品素人视频| 欧洲精品国产| 视频在线观看你懂的| 国产成人精品免费| 91精品在线一区| 综合久久中文字幕| 久久久久久网| 88国产精品欧美一区二区三区| 久久国产露脸精品国产| 亚洲精品电影| 久久人人爽亚洲精品天堂| 我不卡一区二区| 国产99久久久国产精品成人免费 | 可以免费看的av毛片| 欧美日韩福利| 欧美第一黄色网| 欧美黑人一级片| 欧美黄免费看| 欧美大尺度激情区在线播放| 麻豆天美蜜桃91| 亚洲综合色站| 欧美肥老妇视频| 久久久一区二区三区四区| 欧美日一区二区三区在线观看国产免| 色多多国产成人永久免费网站 | 日本中文字幕成人| 亚洲另类在线观看| 天堂资源在线中文精品| 国产精品白丝jk喷水视频一区| 老熟妇一区二区三区| 日韩电影在线一区二区三区| 国产精品久久久久久久午夜| 91国产精品一区| 国产精品123| 国产一区二区三区四区hd| 天堂中文在线视频| 4438x成人网全国最大| 亚洲成人国产| 欧美激情久久久久久| 日本在线视频免费观看| 亚洲免费中文| 国产精品自在线| 亚洲精品久久久久久无码色欲四季| 不卡一区二区在线| 日本精品国语自产拍在线观看| 成人在线视频成人| 亚洲色图清纯唯美| 日韩人妻无码精品久久久不卡| 天堂电影一区| 欧美亚洲综合一区| 日韩欧美中文在线视频| 国语一区二区三区| 中文字幕亚洲欧美日韩在线不卡| 久久久精品视频免费观看| 亚洲美洲欧洲综合国产一区| 国产精品国产亚洲伊人久久 | 日本网站在线观看一区二区三区| 国产美女直播视频一区| 欧日韩在线视频| 欧美国产一区二区| 美女扒开大腿让男人桶| 日韩漫画puputoon| 精品成人佐山爱一区二区| 手机免费看av| 欧美视频不卡| 国产精品毛片a∨一区二区三区|国 | 51调教丨国产调教视频| 久久人体视频| 欧美亚洲免费电影| a毛片在线免费观看| 91老师国产黑色丝袜在线| 亚洲AV无码成人精品一区| 中老年在线免费视频| 91精品免费在线观看| 丝袜美腿中文字幕| 国产专区一区| 成人精品视频久久久久| 麻豆影视在线| 午夜精品福利在线| www.午夜av| 成人精品影视| 色综合久久精品亚洲国产| 最好看的日本字幕mv视频大全| 成人看片黄a免费看在线| 制服丝袜综合日韩欧美| 欧美大片免费高清观看| 亚洲高清久久久久久| tube国产麻豆| 六月丁香婷婷色狠狠久久| 久久精品五月婷婷| 成人福利电影| 欧美xxx久久| 亚洲AV成人无码精电影在线| 日本视频免费一区| 久久福利电影| 国产高清视频色在线www| 日韩精品专区在线影院重磅| 国产一二三四视频| 青青草97国产精品免费观看无弹窗版| 免费国产一区二区| 少妇淫片在线影院| 亚洲精品国产精品国自产在线 | 精品色蜜蜜精品视频在线观看| 18深夜在线观看免费视频| 98精品视频| 国产欧美日韩中文字幕在线| av电影在线观看网址| 欧美日韩小视频| 亚洲女同二女同志奶水| 日韩一区二区三区精品| 夜夜嗨av一区二区三区网站四季av| 欧美一级bbbbb性bbbb喷潮片| 国产91免费在线观看| 一区二区三区欧美久久| 日本成人在线免费| 亚洲另类视频| 激情小说综合网| 欧美私密网站| 亚洲欧美制服另类日韩| 亚洲黄网在线观看| 国产欧美精品日韩区二区麻豆天美| 欧美xxxxx在线视频| 精品国产一区二区三区噜噜噜| 日韩女优人人人人射在线视频| 国产精品秘入口| 欧美性大战久久| 午夜激情福利电影| 国内外成人在线| www.国产在线视频| 四虎884aa成人精品最新| 日韩av电影在线免费播放| 高清在线观看av| 91精品在线观看入口| 欧美黄色一区二区三区| www.激情成人| 国产麻花豆剧传媒精品mv在线| 色综合综合色| 91精品视频在线| 玖玖在线播放| 国产亚洲欧洲高清一区| 99久久久久久久| 亚洲成人在线观看视频| 特级西西www444人体聚色| 精品一区二区日韩| 水蜜桃色314在线观看| 精品国产aⅴ| 欧美精品一区二区三区蜜桃| 日韩欧美国产二区| 中文字幕乱码在线播放| 中文字幕国产亚洲| 刘玥91精选国产在线观看| 欧美网站在线观看| 暗呦丨小u女国产精品| 99re8在线精品视频免费播放| 成人亚洲视频在线观看| 牛牛国产精品| 青娱乐一区二区| 日韩欧美另类中文字幕| 国产精品高潮呻吟久久av无限| 日本大片在线播放| 亚洲欧洲在线免费| 国产肥老妇视频| 在线精品亚洲一区二区不卡| 欧美三级 欧美一级| 国产午夜亚洲精品理论片色戒 | 久久香蕉国产线看观看网| 日本激情一区二区| 欧美猛男gaygay网站| 九九热在线免费观看| 亚洲青青青在线视频| 久久久无码人妻精品一区| 国产乱码一区二区三区| 亚洲成人av免费看| 国产欧美三级| 91网站在线观看免费| 成人av国产| 免费日韩av电影| 超碰成人福利| 91在线观看免费| 久久影视精品| 日韩av手机在线看| 丁香花电影在线观看完整版| xxxxxxxxx欧美| 男人的天堂狠狠干| 国产在线高清理伦片a| 国产视频精品免费播放| 亚洲a视频在线| 5566中文字幕一区二区电影 | 在线欧美三级| 久久精品电影网站| 日韩美女网站| 伊人一区二区三区久久精品| 视频一区二区三区在线看免费看| 亚洲精品一区二区三区福利 | 91成人在线| 日本精品一区二区三区在线播放视频| 超碰在线网站| 久久人人爽人人| av中文字幕电影在线看| 色中色综合影院手机版在线观看| av文字幕在线观看| 久久精品免费电影| 麻豆网站在线观看| 精品国产一区久久久| 在线观看国产原创自拍视频| 国产一区二区三区在线观看网站 | 久久免费视频这里只有精品| gogo在线高清视频| 欧美精品在线免费观看| 91网址在线观看| 欧美成人剧情片在线观看| 国产写真视频在线观看| 欧美成人午夜影院| 少女频道在线观看高清 | 欧美精品资源| 国产精品久久久久av免费| www.av毛片| 欧美成人家庭影院| 国产欧美亚洲精品| 9999在线精品视频| caoporen国产精品| 精品丝袜久久| 欧美连裤袜在线视频| 精品日韩在线| 自拍偷拍99| 欧美日韩ab| 国产成人在线免费看| 日日嗨av一区二区三区四区| 中日韩av在线播放| 国产精品自拍在线| 丝袜熟女一区二区三区| 久久久久久99久久久精品网站| 日本一卡二卡在线播放| 亚洲欧美怡红院| 国产在线视频99| 色综合天天天天做夜夜夜夜做| 久久久久亚洲视频| 91精品婷婷国产综合久久| 日本黄色不卡视频| 国产一区二区三区日韩欧美| 超碰电影在线播放| 97国产suv精品一区二区62| 丝袜美腿一区| 91亚洲国产成人精品性色| 风间由美中文字幕在线看视频国产欧美 | 黄色av网址在线播放| 青青草一区二区三区| 超碰人人cao| 久久色成人在线| 卡通动漫亚洲综合| 欧美日韩中文字幕在线| 一级特黄aaa大片| 亚洲国产天堂久久国产91| 91美女视频在线| 欧美—级高清免费播放| 亚洲a∨精品一区二区三区导航| 99理论电影网| 成人久久电影| 欧美精品一区二区三区三州| 青草av.久久免费一区| 国产精品熟妇一区二区三区四区| 久久久精品视频网站| 性欧美疯狂xxxxbbbb| 亚洲一区在线观| 亚洲精品久久久久| 国产不卡在线| 国产精品第2页| 成人高潮a毛片免费观看网站| 午夜免费电影一区在线观看| 亚洲美女色禁图| 欧美污在线观看| 国产精品欧美一区二区三区| 国产精品黄色网| 欧美一区二区在线视频| 精品欧美不卡一区二区在线观看| 久久久久国产精品免费| av成人在线观看| 国产三区二区一区久久| 综合视频在线| 天堂视频免费看| 久久精品无码一区二区三区| 日本高清www免费视频| 日韩精品一区二区三区在线播放 | 国产精品日韩欧美大师| 手机免费av片| 日本在线不卡视频| 人妻熟女aⅴ一区二区三区汇编| 日本a口亚洲| 日韩av一区二区在线| 久久国产精品高清一区二区三区| 欧美极品少妇全裸体| 精品中文视频| 久久免费看毛片| 久久丁香综合五月国产三级网站| 亚洲一区二区三区蜜桃| 欧美性jizz18性欧美| 男人天堂网在线视频| 久久人人爽人人爽人人片av高清| av不卡一区| 无码av天堂一区二区三区| 成人午夜视频在线| 久久av高潮av无码av喷吹| 日韩精品一区在线观看| 日韩成人伦理| 成人在线免费网站| 狠色狠色综合久久| 极品白嫩少妇无套内谢| 亚洲国产三级在线| 刘亦菲久久免费一区二区| 亚洲91精品在线| 亚洲第一福利专区| 在线免费视频a| 国产精品久久午夜| 国产老女人乱淫免费| 久久成人综合视频| 久久影院一区二区三区| 日本人妻伦在线中文字幕| 国产成人综合网站| 久久久久久久99| 日韩国产精品亚洲а∨天堂免| 日本免费一区二区六区| 欧美日韩电影一区二区| 日韩成人免费在线| 二区三区四区视频| 欧美一级生活片| 99re6在线精品视频免费播放| 久久久久一区二区| 日韩av二区在线播放| 国产免费一区二区三区四区| 日韩一级大片在线观看| 999福利在线视频| 日韩欧美一区二区三区四区| 麻豆成人免费电影| 久草网站在线观看| 日韩成人av网| 免费在线成人激情电影| 欧洲金发美女大战黑人| www.欧美色图| 夜夜狠狠擅视频| 欧美华人在线视频| 国产最新精品| 99国产精品免费视频| 狠狠操狠狠色综合网| 欧洲不卡av| 久久99国产精品| 精品中文av资源站在线观看| 国产一级生活片| 一区二区三区久久精品| 亚洲国产视频二区| 久久久精品在线视频| 亚洲欧美激情一区二区| 欧美大片aaa| 91精品啪在线观看麻豆免费 | 丝袜亚洲另类欧美重口| y111111国产精品久久久| 国产wwwxx| 午夜伦欧美伦电影理论片| 日韩毛片久久久| 九色91国产| 国产精品综合一区二区三区|