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語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中約瑟夫環(huán)問(wèn)題探究
這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中約瑟夫環(huán)問(wèn)題,總的來(lái)說(shuō)這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過(guò)程。希望通過(guò)這道題能給你帶來(lái)一種解題優(yōu)化的思路2023-01-01
C語(yǔ)言實(shí)現(xiàn)從指定位置截取文件內(nèi)容
這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言實(shí)現(xiàn)從指定位置截取文件內(nèi)容,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
C++11右值引用和std::move語(yǔ)句實(shí)例解析(推薦)
右值引用(及其支持的Move語(yǔ)意和完美轉(zhuǎn)發(fā))是C++0x將要加入的最重大語(yǔ)言特性之一。這篇文章主要介紹了C++11右值引用和std::move語(yǔ)句實(shí)例解析,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
Qt實(shí)現(xiàn)抽獎(jiǎng)小游戲的三種方式
本文主要介紹了Qt實(shí)現(xiàn)抽獎(jiǎng)小游戲的三種方式,主要包括while循環(huán),定時(shí)器,線程這三種方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10

