C語(yǔ)言柔性數(shù)組的實(shí)現(xiàn)示例
柔性數(shù)組:結(jié)構(gòu)體中最后一個(gè)元素是未知大小的數(shù)組,數(shù)組大小可變
柔性數(shù)組特點(diǎn)
- ①結(jié)構(gòu)體中的柔性數(shù)組成員前面必須至少有一個(gè)其他成員
- ②sizeof返回的結(jié)構(gòu)體大小不包括柔性數(shù)組的內(nèi)存
- ③包含柔性數(shù)組成員的結(jié)構(gòu)體要用malloc()函數(shù)進(jìn)行內(nèi)存分配
使用free函數(shù)釋放一塊內(nèi)存,不能多次釋放同一塊內(nèi)存 ,否則程序會(huì)崩潰
柔性數(shù)組使用舉例(結(jié)構(gòu)體成員內(nèi)存是連續(xù)的)
1.
#include<stdio.h> #include<stdlib.h> struct S{ int a; int arr[0]; }; int main(){ struct S stu; printf("%d\n",sizeof(stu)); //結(jié)果是4 數(shù)不包含柔性數(shù)組的大小 struct S *temp=(struct S*)malloc(4*sizeof(int)); for(int i=0;i<3;i++) { temp->arr[i]=i; } for(int i=0;i<3;i++) { printf("%d",temp->arr[i]); } //利用realloc改變數(shù)組大小 struct S *te=realloc(temp,10*sizeof(int)); if(te!=NULL) { temp=te; } for(int i=3;i<9;i++) { temp->arr[i]=i; } for(int i=3;i<9;i++) { printf("%d",temp->arr[i]); } free(temp); temp=NULL; return 0; }
使用指針實(shí)現(xiàn)柔性數(shù)組的操作舉例(結(jié)構(gòu)體成員內(nèi)存是不連續(xù)的)
2.
#include<stdio.h> #include<stdlib.h> struct S{ int a; int *arr; }; int main(){ struct S stu; struct S *temp=(struct S*)malloc(sizeof(struct S)); temp->arr=(int *)malloc(3*sizeof(int)); for(int i=0;i<3;i++) { temp->arr[i]=i; } for(int i=0;i<3;i++) { printf("%d",temp->arr[i]); } int *te=realloc(temp->arr,10*sizeof(int)); if(te!=NULL) { temp->arr=te; } for(int i=3;i<10;i++) { temp->arr[i]=i; } for(int i=3;i<10;i++) { printf("%d",temp->arr[i]); } free( temp->arr); temp->arr=NULL; free(temp); temp=NULL; }
到此這篇關(guān)于C語(yǔ)言柔性數(shù)組的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)C語(yǔ)言 柔性數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c++中#include <>與#include""的區(qū)別詳細(xì)解析
<>先去系統(tǒng)目錄中找頭文件,如果沒(méi)有在到當(dāng)前目錄下找。所以像標(biāo)準(zhǔn)的頭文件 stdio.h、stdlib.h等用這個(gè)方法2013-10-10高效實(shí)現(xiàn)整型數(shù)字轉(zhuǎn)字符串int2str的方法
下面小編就為大家?guī)?lái)一篇高效實(shí)現(xiàn)整型數(shù)字轉(zhuǎn)字符串int2str的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03C++11中內(nèi)聯(lián)函數(shù)(inline)用法實(shí)例
內(nèi)聯(lián)函數(shù)本質(zhì)還是一個(gè)函數(shù),但在聲明的時(shí)候,函數(shù)體要和聲明結(jié)合在一起,否則編譯器將它作為普通函數(shù)來(lái)對(duì)待,下面這篇文章主要給大家介紹了關(guān)于C++11中內(nèi)聯(lián)函數(shù)(inline)的相關(guān)資料,需要的朋友可以參考下2022-10-10解析bitmap處理海量數(shù)據(jù)及其實(shí)現(xiàn)方法分析
本篇文章是對(duì)bitmap處理海量數(shù)據(jù)及其實(shí)現(xiàn)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語(yǔ)言學(xué)習(xí)之條件和?if...else語(yǔ)句詳解
這篇文章主要給大家介紹了C語(yǔ)言中的條件和?if...else語(yǔ)句,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12