精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产一区二区三区奇米久涩| 亚洲第一区中文99精品| 色涩成人影视在线播放| wwwwww在线观看| 香蕉久久99| 在线观看三级视频欧美| 中文字幕国产亚洲| www.国产视频.com| 国产免费www| 日本大胆欧美| 日韩女优电影在线观看| 男女激情无遮挡| 日产精品久久久久| 久久aimee| 欧洲视频一区二区| 红桃一区二区三区| 日本又骚又刺激的视频在线观看| 亚洲免费影院| 9191久久久久久久久久久| 中文有码久久| 91av国产精品| 99人久久精品视频最新地址| 自拍偷拍亚洲欧美| 中文字幕12页| 小草在线视频免费播放| 激情欧美日韩一区二区| 97在线视频免费看| 亚洲天堂岛国片| eeuss鲁片一区二区三区| 91久久久免费一区二区| 免费看日本黄色| 国产女人在线观看| 国产一区二区伦理片| 欧美最近摘花xxxx摘花| 欧美人妻一区二区| 精品日韩免费| 国产丝袜欧美中文另类| 国产精品日韩一区二区 | a国产在线视频| 中文字幕一区二区三区色视频| 久久久久久久久久久久久9999| www.日韩高清| 国产一区二区三区四区三区四| 亚洲欧美日本另类| 可以直接看的无码av| 国产精品男女| 亚洲黄色www网站| 尤物网站在线观看| 国产一区二区三区亚洲| 精品国产一区久久| 日韩女优在线视频| av不卡一区二区| 亚洲国产成人久久综合一区| www.四虎精品| 国产伦精品一区二区三区在线播放| 日韩欧美一级二级| 四虎精品一区二区| 久久精品色综合| 亚洲国产欧美一区二区三区同亚洲| 久久久久久久久久久久国产精品| 在线视频亚洲欧美中文| 亚洲第一二三四五区| 熟女人妻在线视频| 日韩综合av| 亚洲经典中文字幕| 国产a级黄色片| 国产伦精品一区二区三区在线播放| 欧美大肚乱孕交hd孕妇| www.美色吧.com| 欧美顶级毛片在线播放| 亚洲美女在线观看| 在线观看国产精品一区| 色8久久影院午夜场| 欧美性生活大片免费观看网址| 久久久噜噜噜www成人网| 3d性欧美动漫精品xxxx软件| 欧美日韩三级在线| 久久综合久久久久| av福利在线导航| 日韩欧美在线网址 | 色婷婷粉嫩av| 自产国语精品视频| 91精品国产一区| 国产偷人爽久久久久久老妇app| 麻豆精品在线观看| 444亚洲人体| 欧美伦理影视网| 精品一区二区影视| av电影成人| 三级在线电影| 亚洲婷婷在线视频| 尤物av无码色av无码| 欧美日韩尤物久久| 欧美成人性战久久| 少妇无套高潮一二三区| 欧美另类专区| 国产精品男人的天堂| www.色日本| 久久久精品黄色| av动漫在线播放| 日韩制服诱惑| 欧美大片免费久久精品三p| 国产人妻一区二区| 亚洲国产合集| 久久久久北条麻妃免费看| 日本一区二区三区四区五区| 欧洲成人综合网| 亚洲精品九九| 国产精品国产三级国产aⅴ浪潮| 中文字幕一区二区三区乱码 | 亚洲第一黄色网| 51妺嘿嘿午夜福利| 韩日精品在线| 国产欧美欧洲在线观看| 天堂а在线中文在线无限看推荐| 国产精品久久久久aaaa樱花| 国产精品无码av在线播放| 国产精品**亚洲精品| 亚洲日本中文字幕| 中文字幕av专区| 国产精品久av福利在线观看| 色婷婷av一区二区三区久久| 精品欧美一区二区三区免费观看| 欧美色一级片| 国产日本欧美视频| 日韩欧美电影在线观看| 一区二区三区在线观看动漫 | www.国产高清| 粉嫩av一区二区三区| 91免费视频黄| 日本中文字幕视频一区| 伊人久久免费视频| 免费看的黄色录像| 三级不卡在线观看| 蜜桃狠狠色伊人亚洲综合网站| 激情图片在线观看高清国产| 91精品国产综合久久精品麻豆| 日本黄色一级网站| 99久久.com| 91精品久久久久久久久久| 大乳在线免费观看| 91国产成人在线| 人妻少妇精品视频一区二区三区| 欧美午夜免费影院| 国产成人精品日本亚洲11| 婷婷在线视频观看| 欧美男男青年gay1069videost| 在线观看亚洲大片短视频| 日日夜夜精品视频免费| 日本一区免费在线观看| 亚洲一区二区三区四区| 在线a欧美视频| 中文字幕人妻丝袜乱一区三区 | 成人无码精品1区2区3区免费看| 日韩黄色免费电影| 日韩久久在线| 成人亚洲网站| 少妇高潮久久77777| 91美女精品网站| 亚洲免费av观看| 无码人妻丰满熟妇区毛片蜜桃精品 | 国产精品第108页| 99久久99久久精品免费观看| 欧美视频在线观看网站| 亚洲制服欧美另类| 国产成人久久精品| 免费黄色网址在线观看| 91精品免费在线观看| 免费人成年激情视频在线观看| 丁香一区二区三区| 精品一卡二卡三卡| 97精品国产一区二区三区| 91欧美精品成人综合在线观看| 91网在线看| 亚洲精品456在线播放狼人| 国产视频1区2区| 国产精品久久福利| 国产大片一区二区三区| 在线欧美视频| 欧美重口乱码一区二区| 青青热久免费精品视频在线18| 大胆人体色综合| 国产无人区码熟妇毛片多| 2024国产精品| 亚洲一区精品视频在线观看| 欧美日韩一区二区国产| 明星裸体视频一区二区| 日韩国产91| 午夜精品三级视频福利| 蜜臀av性久久久久蜜臀aⅴ四虎| 91久久久久久国产精品| av2020不卡| 少妇av一区二区三区| 日本精品久久久久| 欧美精品免费视频| 免费在线不卡视频| 综合亚洲深深色噜噜狠狠网站| 中文字幕乱码在线| 精品写真视频在线观看| 熟女少妇在线视频播放| 偷偷www综合久久久久久久| 精品国产乱码久久久久久蜜柚| 91p九色成人| 97香蕉久久超级碰碰高清版| 快射av在线播放一区| 亚洲欧美国产另类| 日本韩国免费观看| 欧美一区二区三区电影| 香蕉污视频在线观看| 亚洲国产日韩a在线播放性色| 嘿嘿视频在线观看| 91小视频在线| 天天躁日日躁狠狠躁av| 精久久久久久久久久久| 成人精品视频一区二区| 亚洲久久一区| 亚洲一区三区在线观看| 亚洲桃色综合影院| 国产成人精品一区二区三区福利| 免费成人黄色网| 日韩av手机在线看| 波多野一区二区| 欧美激情videoshd| 国产欧美黑人| 久久精品国产电影| 日本网站在线免费观看视频| 亚洲女人初尝黑人巨大| 亚洲精品18p| 精品久久久久久亚洲综合网| 国产人妖一区二区| 欧美日韩亚洲另类| 成年人视频免费| 日本久久电影网| 欧美男人亚洲天堂| 在线亚洲精品福利网址导航| 中文字幕激情小说| 欧美日韩国产区| 五月天综合激情| 欧美日韩国产精品| 老熟妇仑乱一区二区av| 欧美午夜片欧美片在线观看| 中文字幕亚洲精品在线| 精品国产91久久久| 美女又黄又免费的视频| 久久精品国产精品青草| 777视频在线| 麻豆精品一区二区av白丝在线| 熟妇人妻无乱码中文字幕真矢织江| 欧美亚洲免费| 欧美一级黄色片视频| 日韩精品亚洲一区| 欧美精品久久久久久久久25p| 蜜桃av一区二区三区电影| 国产嫩草在线观看| 久久国产精品第一页| caoporm在线视频| 国产精品乡下勾搭老头1| 中国男女全黄大片| 久久伊人中文字幕| 变态另类ts人妖一区二区| 国产精品理伦片| 中文字幕电影av| 亚洲成va人在线观看| 成人精品在线看| 在线亚洲人成电影网站色www| 亚洲视频久久久| 日韩一区二区精品| 天堂在线视频免费观看| 亚洲欧美综合v| 免费在线午夜视频| 国模私拍一区二区三区| 日韩和的一区二在线| 成人午夜小视频| 久久亚洲道色| 亚洲人成人77777线观看| 欧美久久视频| 777米奇影视第四色| 激情国产一区二区| 中文字幕人妻一区二区三区| 国产片一区二区三区| 国产十六处破外女视频| 欧美高清在线一区| 女同久久另类69精品国产| 一区二区三区加勒比av| 特级毛片www| 91精品免费观看| 男男电影完整版在线观看| 久久精品国产久精国产思思| 欧美13videosex性极品| 国产精品夜色7777狼人| 动漫视频在线一区| 亚洲欧洲免费无码| 日韩天堂av| 人人爽人人爽av| 久久青草欧美一区二区三区| 丰满少妇被猛烈进入一区二区| 欧美日韩国内自拍| 国产精品毛片一区二区在线看舒淇 | 久久综合社区| 亚洲精品一区国产精品| 亚洲少妇一区| 精品人妻一区二区三区免费| 久久麻豆一区二区| 久久无码精品丰满人妻| 欧美日韩高清一区二区三区| 瑟瑟在线观看| 久操成人在线视频| 国产伊人久久| 欧美精品与人动性物交免费看| 你懂的成人av| 亚洲精品第三页| 久久精品网站免费观看| 久久久一区二区三区四区| 欧美另类久久久品| 国产在线视频网址| 97超级碰碰碰久久久| 奇米一区二区| 国产成年人在线观看| 日本在线不卡视频| 欧美一级片中文字幕| 国产91精品入口| 久久国产美女视频| 欧美日韩免费一区二区三区| 水莓100国产免费av在线播放| 久久成人18免费网站| 狂野欧美性猛交xxxx| 水蜜桃亚洲精品| 久久福利毛片| 30一40一50老女人毛片| 亚洲aⅴ怡春院| 黄色aaa大片| 欧美激情欧美激情| 91成人短视频| 99re6这里有精品热视频| 国产在线不卡一卡二卡三卡四卡| 欧美极品jizzhd欧美18| 欧美伊人久久大香线蕉综合69| 日本在线丨区| 国产成人午夜视频网址| 狠狠色狠狠色综合婷婷tag| 在线观看日韩羞羞视频| 欧美a级理论片| 少妇av片在线观看| 欧美天天综合网| 91亚洲精选| 91久久精品美女高潮| 五月天久久777| 日本在线观看视频一区| 亚洲婷婷综合色高清在线| 国产熟女精品视频| 欧美成人性色生活仑片| 超碰97久久国产精品牛牛| 国产手机免费视频| 男男视频亚洲欧美| 日本黄区免费视频观看| 欧美日本一区二区| 国产cdts系列另类在线观看| 亚洲va欧美va国产综合剧情 | 国产精品久久久久久久一区二区| 亚洲综合激情小说| 性做久久久久久久| 午夜精品www| 日韩高清一级| 免费裸体美女网站| 日本一区二区三区四区在线视频| 成人免费一区二区三区| 日韩中文字幕网| 幼a在线观看| 91亚洲精华国产精华| 国产精品草草| 免费成人深夜夜行p站| 欧美午夜影院一区| 精品176二区| 国产不卡一区二区三区在线观看 | 日本欧美黄色片| 91色视频在线| 一级黄色a视频| 欧美国产日韩在线| 国产a久久精品一区二区三区 | 色8久久久久| 老司机激情视频| 久久久久免费观看| 91禁在线观看| 9.1国产丝袜在线观看| 日韩精品免费| 波多野结衣加勒比| 欧美日韩亚洲综合| 国产高清视频色在线www| 亚洲精品成人自拍| av在线综合网| 亚洲一区二区色| 91精品国产色综合| 国产精品毛片一区二区在线看| 国产精品久久久久久亚洲av| 欧美亚洲一区三区| av资源在线播放| 日本一道在线观看| 久久精品欧美日韩| 亚洲欧美另类综合| 国产精品美女久久|