c语言内存分配与释放 不同类别变量的内存分配和释放的区别
1.不同變量使用內存的區別
2.為什么要動態分配內存
大多數情況程序使用的數組小于100個元素,但有時程序需要100000個元素,如果直接聲明一個內含100000個元素的數組,這樣做浪費內存。
所以通過動態分配內存,使程序更加靈活
3.free在動態內存分配的作用——防止內存泄漏
double *a =(double*)malloc(n*sizeof(double))
函數結束,作為自動變量的指針a消失,但他指向的n*sizeof(double)字節的內存仍然存在,而且由于指針a已經被銷毀,所以無法訪問這塊內存,這塊內存也不能被重復使用。
所以需要用free釋放動態分配的內存
4.free和malloc用法
free和malloc原型都在stdlib.h頭文件中
malloc()返回類型通常為指向char的指針,從ANSI C標準開始,C使用一個新的類型,指向void的指針。所以通常malloc函數的返回值會被強制轉換為匹配的類型。
double *p; p=(double *)malloc(30*sizeof(double));指針p被聲明為指向一個double類型,可以像使用數組名一樣使用它,這里分配的是連續的內存塊,指針指向已分配塊中的第一個結構。
free()函數的參數是之前malloc()返回的地址,因此參數也應是一個指針。該函數釋放之前malloc()分配的內存。
free(p);5.例子-通訊錄排序
習題9-5 通訊錄排序 (20 分)
輸入n個朋友的信息,包括姓名、生日、電話號碼,本題要求編寫程序,按照年齡從大到小的順序依次輸出通訊錄。題目保證所有人的生日均不相同。
輸入格式:
輸入第一行給出正整數n(<10)。隨后n行,每行按照“姓名 生日 電話號碼”的格式給出一位朋友的信息,其中“姓名”是長度不超過10的英文字母組成的字符串,“生日”是yyyymmdd格式的日期,“電話號碼”是不超過17位的數字及+、-組成的字符串。
輸出格式:
按照年齡從大到小輸出朋友的信息,格式同輸出。
輸入樣例:
3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
結尾無空行
輸出樣例:
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678
結尾無空行
5.1代碼
#include<stdio.h> #include<stdlib.h> struct people{char name[11];long long birth;char phonenum[20]; };int main(){struct people *p,temp;int n,i,j;scanf("%d",&n);p=(struct people *)malloc(n*sizeof(struct people));//分配空間for(i=0;i<n;++i){scanf("%s %lld %s",&p[i].name,&p[i].birth,&p[i].phonenum);}for(i=0;i<n;++i){for(j=i+1;j<n;++j){if(p[i].birth>p[j].birth){//排序temp=p[i];p[i]=p[j];p[j]=temp;}}}for(i=0;i<n;++i){if(i==0)printf("%s %lld %s",p[i].name,p[i].birth,p[i].phonenum);else printf("\n%s %lld %s",p[i].name,p[i].birth,p[i].phonenum);}free(p);//釋放 } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的c语言内存分配与释放 不同类别变量的内存分配和释放的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计数方法应用于PTB数据集
- 下一篇: stc15w4k32s4芯片引脚图片_单