中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

梓益C語(yǔ)言學(xué)習(xí)筆記之鏈表&動(dòng)態(tài)內(nèi)存&文件

梓益C語(yǔ)言學(xué)習(xí)筆記之鏈表&動(dòng)態(tài)內(nèi)存&文件

創(chuàng)新互聯(lián)公司于2013年成立,先為金牛等服務(wù)建站,金牛等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為金牛企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

一、定義:

鏈表是一種物理存儲(chǔ)上非連續(xù),通過指針鏈接次序,實(shí)現(xiàn)的一種線性存儲(chǔ)結(jié)構(gòu)。

二、特點(diǎn):

鏈表由一系列節(jié)點(diǎn)(鏈表中每一個(gè)元素稱為節(jié)點(diǎn))組成,節(jié)點(diǎn)在運(yùn)行時(shí)動(dòng)態(tài)生成(malloc),每個(gè)節(jié)點(diǎn)包括兩個(gè)部分:

存儲(chǔ)數(shù)據(jù)元素的數(shù)據(jù)域

存儲(chǔ)下一個(gè)節(jié)點(diǎn)地址的指針域

如:

typedef struct student

{  

int num;

char name[20];

struct student *next;

    }STU;

三、動(dòng)態(tài)內(nèi)存申請(qǐng)

在實(shí)際的編程中,有時(shí)所需的內(nèi)存空間取決于實(shí)際輸入的數(shù)據(jù),無(wú)法預(yù)先確定 ,所以需要?jiǎng)討B(tài)的分配內(nèi)存空間,同時(shí)把不再使用的空間回收再次利用。

如鏈表的內(nèi)存就需要?jiǎng)討B(tài)申請(qǐng)

1.靜態(tài)分配&動(dòng)態(tài)分配

靜態(tài)分配

在程序編譯或運(yùn)行過程中,按事先規(guī)定大小分配內(nèi)存空間的分配方式。如:int a [10]

必須事先知道所需空間的大小。

分配在棧區(qū)或全局變量區(qū),一般以數(shù)組的形式。

按計(jì)劃分配。

動(dòng)態(tài)分配

在程序運(yùn)行過程中,根據(jù)需要大小自由分配所需空間。

按需分配。

分配在堆區(qū),一般使用特定的函數(shù)進(jìn)行分配。

通常使用malloc函數(shù)     void *malloc(unsigned int size);   在堆區(qū)分配一塊長(zhǎng)度為size字節(jié)的連續(xù)區(qū)域,用來(lái)存放類型說明符指定的類型。

函數(shù)返回void*指針,使用時(shí)必須做相應(yīng)的強(qiáng)制類型轉(zhuǎn)換 

分配的內(nèi)存空間內(nèi)容不確定,一般使用memset初始化。

使用完以后,要記得用  free()函數(shù)  釋放內(nèi)存 

返回值:分配空間的起始地址 ( 分配成功 )

 NULL                          ( 分配失敗 )

注意

1、在調(diào)用malloc之后,一定要判斷一下,是否申請(qǐng)內(nèi)存成功。

2、如果多次malloc申請(qǐng)的內(nèi)存,第1次和第2次申請(qǐng)的內(nèi)存不一定是連續(xù)的

例:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

int main()

{

int count,*array,n;

printf("請(qǐng)輸入您要申請(qǐng)的數(shù)組元素個(gè)數(shù)\n");

scanf("%d",&n);

array=(int *)malloc(n*sizeof(int));

if(array==NULL)

{

printf("申請(qǐng)內(nèi)存失敗\n");

return 0;

}

memset(array,0,n*sizeof(int));

for(count=0;count<n;count++)

{

array[count]=count;

}

for(count=0;count<n;count++)

{

printf("%d\n",array[count]);

}

free(array);//釋放array指向的內(nèi)存

return0

}

free 函數(shù)(釋放內(nèi)存函數(shù))

頭文件:#include<stdlib.h>

函數(shù)定義:void free(void *ptr)

函數(shù)說明:free函數(shù)釋放ptr指向的內(nèi)存。

例:

char *p=(char *)malloc(100);

free(p);// 

注意

1、free后,因?yàn)闆]有給p賦值,所以p還是指向原先動(dòng)態(tài)申請(qǐng)的內(nèi)存。但是內(nèi)存已經(jīng)不能再用了,p變成野指針了。

2、一塊動(dòng)態(tài)申請(qǐng)的內(nèi)存只能free一次,不能多次free

四、文件

文件就是存放在磁盤上的,一些數(shù)據(jù)的集合。

1.行緩沖:

標(biāo)準(zhǔn)io庫(kù)函數(shù),往標(biāo)準(zhǔn)輸出(屏幕)輸出東西的時(shí)候是行緩沖的

 行緩沖只有下面幾種情況才刷新緩沖區(qū)

 1-緩沖區(qū)里有換行符  "\n"

2-緩沖區(qū)滿了,自動(dòng)刷新緩沖區(qū)

如:while(1)

{

printf("hello world ");

}

3-人為刷新緩沖區(qū) fflush(stdout)

4-程序正常結(jié)束,刷新緩沖區(qū)return 0;

2.全緩沖:

標(biāo)準(zhǔn)io庫(kù)函數(shù) 往普通文件讀寫數(shù)據(jù)是全緩沖的,

碰到換行符也不刷新緩沖區(qū)

1.緩沖區(qū)滿了,刷新緩沖區(qū)

2.人為刷新緩沖區(qū) fflush(文件指針)

3.程序正常結(jié)束刷新緩沖區(qū)

3.無(wú)緩沖:

在讀寫文件的時(shí)候通過系統(tǒng)調(diào)用io (read write),對(duì)文件進(jìn)行讀寫數(shù)據(jù)是無(wú)緩沖的,即寫數(shù)據(jù)會(huì)立馬進(jìn)入文件,讀數(shù)據(jù)會(huì)立馬進(jìn)入內(nèi)存

4.寫文件的流程:

應(yīng)用程序空間-(內(nèi)核空間 -(驅(qū)動(dòng)程序--(硬盤

應(yīng)用程序和內(nèi)核程序運(yùn)行在不同的空間里,目的是為了保護(hù)內(nèi)核。

通過緩沖可以減少進(jìn)出內(nèi)核的次數(shù),以提高效率。

5.常用文件操作:

5.1打開文件:FILE *fopen(const char *path, const char *mode);

FILE *fp;

fp=fopen(“./test.txt”,”r”);

5.2關(guān)閉文件:int fclose(FILE *fp);

例:

#include<stdio.h>

int main()

{

FILE *fp;

int ret;

fp=fopen("./test.txt","r+");

if(fp==NULL)

{

perror(“fopen”);

return 0;

}

fclose(fp);

return 0;

}

5.3文件定位:

rewind 復(fù)位讀寫位置

把文件內(nèi)部的位置指針移到文件首 

rewind(fp);

ftell 測(cè)文件讀寫位置距文件開始有多少個(gè)字節(jié)

  int length;   length = ftell(fp); 

fseek 定位位置指針(讀寫位置)

fseek函數(shù)(一般用于二進(jìn)制文件即打開文件的方式需要帶b)

int fseek(FILE *stream, long offset, int whence);  //int fseek(文件類型指針,位移量,起始點(diǎn)); 

參數(shù):

whence起始位置 

文件開頭         SEEK_SET     0

文件當(dāng)前位置     SEEK_CUR     1

文件末尾         SEEK_END     2

offset位移量:

以起始點(diǎn)為基點(diǎn),向前、后移動(dòng)的字節(jié)數(shù),正數(shù)往文件末尾方向偏移,負(fù)數(shù)往文件開頭方向偏移。

例:

fseek(fp,50,SEEK_SET)

fseek(fp,-50,SEEK_END);

fseek(fp,0,SEEK_END);

網(wǎng)站題目:梓益C語(yǔ)言學(xué)習(xí)筆記之鏈表&動(dòng)態(tài)內(nèi)存&文件
瀏覽地址:http://www.rwnh.cn/article20/gcgcjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站導(dǎo)航、響應(yīng)式網(wǎng)站、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
灯塔市| 衡东县| 平遥县| 介休市| 福贡县| 大邑县| 西藏| 黎平县| 河间市| 嘉禾县| 久治县| 洪江市| 青海省| 明光市| 崇左市| 凌云县| 和龙市| 成武县| 瓮安县| 垣曲县| 南部县| 临漳县| 马关县| 达日县| 泸西县| 临海市| 夏河县| 伊川县| 丽江市| 衢州市| 湾仔区| 元氏县| 正定县| 方城县| 屯昌县| 班戈县| 潮安县| 白水县| 乐至县| 探索| 诏安县|