C語言冷門知識之你可能沒聽過的柔性數(shù)組
一、簡述
在c99中有明確的規(guī)定允許結(jié)構體中最后一個數(shù)組大小是未知的。
柔性數(shù)組其實是結(jié)構體中的最后一個數(shù)組未說明大小,且結(jié)構體中至少包含一個以上其他類型,如
#include<stdio.h>
struct hei
{
int zeng;
char shi;
int arr[];//或者int arr[0];
}ma;
int main()
{
struct hei ma;
return 0
}
二、具體使用
1.用創(chuàng)建柔性數(shù)組的方法:
#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>//或者是#include<malloc.h>動態(tài)內(nèi)存函數(shù)的頭文件
struct d
{
int nb;
int nn;
int arr[];
};
int main()
{
struct d *p=(struct d*)malloc(sizeof(struct d)+5*sizeof(int));//分別給結(jié)構體中的除了柔
//性數(shù)組的其他類型和給柔性數(shù)組申請空間
p->nb=100;
p->nn=50;
for(int i=0;i<5;i++)
{
p->arr[i]=i;//賦值
printf("%d ",p->arr[i]);
}
struct d *pp=(struct d*)realloc(p,48); //重新調(diào)整所申請的空間,將柔性數(shù)組調(diào)整為40。
if(pp!=NULL)
{
p=pp;
for(i=5;i<10;i++)
{
p->arr[i]=i;//賦值
printf("%d ",p->arr[i]);
}
free(p);
p=NULL;
}
return 0;
}
2.用普通的寫法
#include<stdio.h>
#include<stdlib.h>
struct bb
{
int a;
int *arr;
};
int main()
{
struct bb* p=(struct bb*)malloc(sizeof(struct bb));
p->a=20;
p->arr=(int*)malloc(5*sizeof(int));
for(int i=0;i<5;i++)
{
p->arr[i]=i;
printf("%d ",p->arr[i]);
}
int *ptr=(int*)realloc(p->arr,40);
if(pp!=NULL)
{
p->arr=ptr;
for(int i=5;i<10;i++)
{
int t=p->arr[i]=i;
printf("%d ",t);
}
}
free(p->arr);
p->arr=NULL;
free(p);
p=NULL;
return 0;
}
三、柔性數(shù)組的特點
1.對比這兩種來看,柔性數(shù)組的特點在于只需要用一次malloc創(chuàng)建就可以,而普通的解法則需要兩
次,因為malloc申請的內(nèi)存位置是任意的,所以柔性數(shù)組可以減少內(nèi)存碎片化。
2.柔性數(shù)組申請的內(nèi)存更加集中,有利于查找使用。
3.sizeof求結(jié)構體大小時所求出的大小沒有包括柔性數(shù)組的大小。
4.用malloc函數(shù)進行動態(tài)內(nèi)存申請時,柔性數(shù)組的大小應該大于結(jié)構體的大小
以便于柔性數(shù)組適應預期大小。
5.柔性數(shù)組只用一次開辟,有利于提高訪問速度
------------------------------------------------------------------------------------------------------------------
小伙伴們有什么想法可以留言
到此這篇關于C語言冷門知識之你可能沒聽過的柔性數(shù)組的文章就介紹到這了,更多相關C語言 柔性數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
VisualStudio2022下配置 OpenMP多線程編程環(huán)境與運行
本文主要介紹了VisualStudio2022下配置 OpenMP多線程編程環(huán)境與運行,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-06-06
c++中虛函數(shù)和純虛函數(shù)的作用與區(qū)別
這篇文章主要介紹了c++中虛函數(shù)和純虛函數(shù)的作用與區(qū)別,需要的朋友可以參考下2014-07-07
C++ 模擬實現(xiàn)list(迭代器)實現(xiàn)代碼
這篇文章主要介紹了C++ 模擬實現(xiàn)list(迭代器)實現(xiàn)代碼的相關資料,需要的朋友可以參考下2017-05-05
C++11?condition_variable條件變量的用法說明
這篇文章主要介紹了C++11?condition_variable條件變量的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07

