C語言程序設(shè)計(jì) 課件 任務(wù) 6 學(xué)生成績管理系統(tǒng)之信息存儲進(jìn)階_第1頁
C語言程序設(shè)計(jì) 課件 任務(wù) 6 學(xué)生成績管理系統(tǒng)之信息存儲進(jìn)階_第2頁
C語言程序設(shè)計(jì) 課件 任務(wù) 6 學(xué)生成績管理系統(tǒng)之信息存儲進(jìn)階_第3頁
C語言程序設(shè)計(jì) 課件 任務(wù) 6 學(xué)生成績管理系統(tǒng)之信息存儲進(jìn)階_第4頁
C語言程序設(shè)計(jì) 課件 任務(wù) 6 學(xué)生成績管理系統(tǒng)之信息存儲進(jìn)階_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

HTML5的優(yōu)勢

解決了跨瀏覽器的問題

新增多個(gè)新特性

(語義化標(biāo)簽、多媒體標(biāo)簽、canvas元素、本地存儲等)

用戶優(yōu)先原則

化繁為簡的優(yōu)勢任務(wù)描述實(shí)現(xiàn)學(xué)生成績信息管理系統(tǒng),該系統(tǒng)能實(shí)時(shí)開辟內(nèi)存空間,實(shí)現(xiàn)信息的動(dòng)態(tài)存儲。HTML5的優(yōu)勢

解決了跨瀏覽器的問題

新增多個(gè)新特性

(語義化標(biāo)簽、多媒體標(biāo)簽、canvas元素、本地存儲等)

用戶優(yōu)先原則

化繁為簡的優(yōu)勢知識儲備在C語言的編程世界里,指針是一個(gè)核心概念,它代表著變量的內(nèi)存地址。通過指針,程序員能夠直接訪問和操作存儲在內(nèi)存中的數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)的高效讀取與修改。指針不僅簡化了數(shù)組和字符串的處理,還為動(dòng)態(tài)內(nèi)存分配、函數(shù)參數(shù)傳遞以及復(fù)雜數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹等)的實(shí)現(xiàn)提供了基礎(chǔ)。掌握指針,就是掌握了C語言編程的精髓,能夠編寫出更加高效、靈活的代碼。本章將學(xué)習(xí)C語言中指針相關(guān)知識。6.1 認(rèn)識指針HTML5的優(yōu)勢

解決了跨瀏覽器的問題

新增多個(gè)新特性

(語義化標(biāo)簽、多媒體標(biāo)簽、canvas元素、本地存儲等)

用戶優(yōu)先原則

化繁為簡的優(yōu)勢學(xué)習(xí)內(nèi)容6.1.1指針基本概念6.1.2定義指針變量6.1.3訪問指針變量6.1.4通過指針變量訪問數(shù)據(jù)6.1.5指針運(yùn)算6.1.1指針基本概念1HTML5的優(yōu)勢6.1.1指針基本概念C語言中指針、地址、內(nèi)存是緊密相關(guān)的概念,它們共同構(gòu)成了C語言內(nèi)存訪問和操作的基礎(chǔ)。地址,是內(nèi)存中的一個(gè)位置標(biāo)識符,用于指定數(shù)據(jù)在內(nèi)存中的存儲位置。指針,是一種特殊的變量,它存儲的不是數(shù)據(jù)本身,而是數(shù)據(jù)的地址。內(nèi)存,是計(jì)算機(jī)中用于存儲數(shù)據(jù)和程序的物理部件。HTML5的優(yōu)勢6.1.1指針基本概念指針、地址與內(nèi)存相互關(guān)聯(lián),但又是不同的概念,它們兩兩之間存在一定的關(guān)系。1.指針與地址指針變量中存儲的是地址,即它所指向的數(shù)據(jù)的內(nèi)存地址。我們可以通過指針來讀取或修改該地址內(nèi)存中的數(shù)據(jù)。2.指針與內(nèi)存指針是訪問和操作內(nèi)存數(shù)據(jù)的工具。通過指針,我們可以遍歷內(nèi)存中的數(shù)據(jù)、動(dòng)態(tài)地分配和釋放內(nèi)存、實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹等)。3.地址與內(nèi)存地址是內(nèi)存中的一個(gè)位置標(biāo)識符,用于定位數(shù)據(jù)在內(nèi)存中的存儲位置。程序通過地址來訪問和修改內(nèi)存中的數(shù)據(jù)。6.1.2定義指針變量2HTML5的優(yōu)勢6.1.2定義指針變量在C語言中,指針變量是一種特殊的變量,它用于存儲變量的內(nèi)存地址,而不是變量本身的值。1.聲明指針變量聲明指針變量的語法格式如下:數(shù)據(jù)類型*變量名;以上格式中:數(shù)據(jù)類型表明指針變量可以存儲什么類型變量的地址,*表示這是一個(gè)指針變量,變量名為這個(gè)指針變量的名稱。注意*應(yīng)在變量名左邊,且緊挨變量名,之間一般不加空格。int*ptr; //定義一個(gè)整型指針變量ptrHTML5的優(yōu)勢6.1.2定義指針變量2.指針變量賦值為指針變量賦值時(shí)需要引用變量的地址。C語言中使用取址符(&)來獲取變量的地址,例如定義變量inta=1;,可以使用“&a”獲取變量a的地址。獲取變量地址后可以通過賦值運(yùn)算符=將地址賦給指針變量。示例如下:intvar=20; //定義一個(gè)整型變量varint*ptr; //定義一個(gè)整型指針ptrptr=&var; //將var的地址賦給ptr6.1.3訪問指針變量3HTML5的優(yōu)勢6.1.3訪問指針變量1 #include<stdio.h>2 intmain()3 {4 intvar=20; //定義一個(gè)整型變量var5 int*ptr; //定義一個(gè)整型指針ptr6 ptr=&var; //將var的地址賦給ptr7 //輸出變量ptr的值

8 printf("指針ptr存儲的地址為:%p\n",ptr);9 //輸出變量var的地址

10 printf("變量var的地址為:%p\n",&var); 11 return0;12 }HTML5的優(yōu)勢6.1.3訪問指針變量1 #include<stdio.h>2 intmain()3 {4 intvar=20; //定義一個(gè)整型變量var5 int*ptr; //定義一個(gè)整型指針ptr6 ptr=&var; //將var的地址賦給ptr7 //輸出變量ptr的值

8 printf("指針ptr存儲的地址為:%p\n",ptr);9 //輸出變量var的地址

10 printf("變量var的地址為:%p\n",&var); 11 return0;12 }6.1.4通過指針變量訪問數(shù)據(jù)4HTML5的優(yōu)勢6.1.4通過指針變量訪問數(shù)據(jù)C語言中通過指針運(yùn)算符*實(shí)現(xiàn)借助指針訪問數(shù)據(jù)。其語法格式如下:*指針變量名;例如通過指針運(yùn)算符*獲取指針ptr指向的變量存儲的值,示例如下:*ptr;HTML5的優(yōu)勢6.1.4通過指針變量訪問數(shù)據(jù)1 #include<stdio.h>2 intmain()3 {4 intvar=20; //定義一個(gè)整型變量var5 int*ptr; //定義一個(gè)整型指針ptr6 ptr=&var; //將var的地址賦給ptr7 printf("var=%d\n",var); //輸出變量var的值

8 printf("*ptr=%d\n",*ptr); //通過var地址讀取var中的數(shù)據(jù)

9 return0;10 }HTML5的優(yōu)勢6.1.4通過指針變量訪問數(shù)據(jù)1 #include<stdio.h>2 intmain()3 {4 intvar=20; //定義一個(gè)整型變量var5 int*ptr; //定義一個(gè)整型指針ptr6 ptr=&var; //將var的地址賦給ptr7 printf("var=%d\n",var); //輸出變量var的值

8 printf("*ptr=%d\n",*ptr); //通過var地址讀取var中的數(shù)據(jù)

9 return0;10 }6.1.5指針運(yùn)算5HTML5的優(yōu)勢6.1.5指針運(yùn)算C語言中的指針是一種特殊的變量,它存儲的是變量的內(nèi)存地址而不是變量的值。指針運(yùn)算在C語言中非常關(guān)鍵,因?yàn)樗试S程序直接訪問和操作內(nèi)存。指針也可以進(jìn)行加減運(yùn)算,但其運(yùn)算規(guī)則與常規(guī)算術(shù)運(yùn)算(如整數(shù)加法或減法)有所不同。HTML5的優(yōu)勢6.1.5指針運(yùn)算在C語言中,指針的加法運(yùn)算并不是直接對指針?biāo)赶虻牡刂分颠M(jìn)行算術(shù)加法,而是根據(jù)指針?biāo)赶虻臄?shù)據(jù)類型的大小來進(jìn)行偏移。假設(shè)int型指針*p原本指向內(nèi)存地址0x0001所存儲的變量,對其進(jìn)行加法運(yùn)算,使p=p+1。HTML5的優(yōu)勢

解決了跨瀏覽器的問題

新增多個(gè)新特性

(語義化標(biāo)簽、多媒體標(biāo)簽、canvas元素、本地存儲等)

用戶優(yōu)先原則

化繁為簡的優(yōu)勢6.1.5指針運(yùn)算1 #include<stdio.h>2 intmain()3 {4 intarr[5]={1,2,3,4,5};5 int*ptr=&arr[0]; //ptr指向arr的首元素

6 //輸出ptr指向的值

7 printf("%d\n",*ptr); //輸出值為1 8 //將ptr向前移動(dòng)1個(gè)int類型的大小

9 ptr+=1;10 //輸出ptr指向的新值

11 printf("%d\n",*ptr); //輸出值為212 //假將ptr向前移動(dòng)2個(gè)int類型的大小

13 ptr+=2;

14 //輸出ptr指向的新值

15 printf("%d\n",*ptr); //輸出416 return0;17 }HTML5的優(yōu)勢

解決了跨瀏覽器的問題

新增多個(gè)新特性

(語義化標(biāo)簽、多媒體標(biāo)簽、canvas元素、本地存儲等)

用戶優(yōu)先原則

化繁為簡的優(yōu)勢6.1.5指針運(yùn)算1 #include<stdio.h>2 intmain()3 {4 intarr[5]={1,2,3,4,5};5 int*ptr=&arr[0]; //ptr指向arr的首元素

6 //輸出ptr指向的值

7 printf("%d\n",*ptr); //輸出值為1 8 //將ptr向前移動(dòng)1個(gè)int類型的大小

9 ptr+=1;10 //輸出ptr指向的新值

11 printf("%d\n",*ptr); //輸出值為212 //假將ptr向前移動(dòng)2個(gè)int類型的大小

13 ptr+=2;

14 //輸出ptr指向的新值

15 printf("%d\n",*ptr); //輸出416 return0;17 }6.2 指針與數(shù)組HTML5的優(yōu)勢

解決了跨瀏覽器的問題

新增多個(gè)新特性

(語義化標(biāo)簽、多媒體標(biāo)簽、canvas元素、本地存儲等)

用戶優(yōu)先原則

化繁為簡的優(yōu)勢學(xué)習(xí)內(nèi)容6.2.1指針與一維數(shù)組6.2.2指針與二維數(shù)組6.2.3指針數(shù)組6.2.1指針與一維數(shù)組1HTML5的優(yōu)勢6.2.1指針與一維數(shù)組在C語言中,數(shù)組名在大多數(shù)表達(dá)式中會被轉(zhuǎn)換為指向其首元素的指針。例如現(xiàn)有一個(gè)一維數(shù)組a[5],可以將數(shù)組名賦給指針,以使指針與數(shù)組建立聯(lián)系,代碼示例如下:inta[5]={1,2,3,4,5};int*p=a;利用指向數(shù)組的指針可以訪問數(shù)組元素,其語法格式如下:*(p+下標(biāo));*p; //訪問數(shù)組元素a[0]*(p+1); //訪問數(shù)組元素a[1]*(p+2); //訪問數(shù)組元素a[2]HTML5的優(yōu)勢6.2.1指針與一維數(shù)組1 #include<stdio.h>2 intmain(){3 intarr[]={1,2,3,4,5}; //定義一個(gè)整型數(shù)組

4 //創(chuàng)建一個(gè)指針p,并讓它指向數(shù)組arr的首元素

5 int*p=arr;6 inti;7 //使用指針p遍歷數(shù)組

8 for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++){9 //訪問指針p當(dāng)前指向的元素,并打印它

10 printf("%d",*(p+i)); //使用p[i]可達(dá)到相同的效果

11 }12 return0;13 }例6-4 通過指針訪問數(shù)組元素HTML5的優(yōu)勢6.2.1指針與一維數(shù)組1 #include<stdio.h>2 intmain(){3 intarr[]={1,2,3,4,5}; //定義一個(gè)整型數(shù)組

4 //創(chuàng)建一個(gè)指針p,并讓它指向數(shù)組arr的首元素

5 int*p=arr;6 inti;7 //使用指針p遍歷數(shù)組

8 for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++){9 //訪問指針p當(dāng)前指向的元素,并打印它

10 printf("%d",*(p+i)); //使用p[i]可達(dá)到相同的效果

11 }12 return0;13 }例6-4 通過指針訪問數(shù)組元素注意:該循環(huán)中,p本身并沒有改變,改變的是p+i的表達(dá)式。p始終指向數(shù)組的首元素,但我們通過加法運(yùn)算來訪問數(shù)組中的其他元素。HTML5的優(yōu)勢6.2.1指針與一維數(shù)組1 #include<stdio.h>2 intmain()3 {4 intarr[]={1,2,3,4,5};//定義一個(gè)整型數(shù)組

5 //創(chuàng)建一個(gè)指針p,并讓它指向數(shù)組arr的首元素

6 int*p=arr; 7 while(p<arr+sizeof(arr)/sizeof(arr[0])){8 printf("%d",*p); //打印當(dāng)前指向的元素

9 p++; //將指針移動(dòng)到下一個(gè)元素

10 }11 return0;12 }例6-5 指針遞增遍歷數(shù)組HTML5的優(yōu)勢6.2.1指針與一維數(shù)組1 #include<stdio.h>2 intmain()3 {4 intarr[]={1,2,3,4,5};//定義一個(gè)整型數(shù)組

5 //創(chuàng)建一個(gè)指針p,并讓它指向數(shù)組arr的首元素

6 int*p=arr; 7 while(p<arr+sizeof(arr)/sizeof(arr[0])){8 printf("%d",*p); //打印當(dāng)前指向的元素

9 p++; //將指針移動(dòng)到下一個(gè)元素

10 }11 return0;12 }例6-5 指針遞增遍歷數(shù)組6.2.2指針與二維數(shù)組2HTML5的優(yōu)勢6.2.2指針與二維數(shù)組與一維數(shù)組一樣,二維數(shù)組及多維數(shù)組的元素既可以通過下標(biāo)訪問,又可以通過指針訪問。數(shù)組的起始地址其本身均為一維數(shù)組a[i][j]地址的表示方式為:*(a+i)+j指針訪問元素a[i][j]:*(*(a+i)+j)HTML5的優(yōu)勢6.2.2指針與二維數(shù)組1 #include<stdio.h>2 intmain()3 {4 inta[3][4]={5 {1,2,3,4},6 {5,6,7,8},7 {9,10,11,12}8 };例6-6 使用指針訪問二維數(shù)組元素9 inti,j;10 //使用指針遍歷二維數(shù)組

11 for(i=0;i<3;i++){ //外層循環(huán)遍歷行

12 for(j=0;j<4;j++){ //內(nèi)層循環(huán)遍歷列

13 //通過指針訪問當(dāng)前元素

14 printf("%d",*(*(a+i)+j));15 }16 printf("\n");17 }18 return0;19 }HTML5的優(yōu)勢6.2.2指針與二維數(shù)組1 #include<stdio.h>2 intmain()3 {4 inta[3][4]={5 {1,2,3,4},6 {5,6,7,8},7 {9,10,11,12}8 };例6-6 使用指針訪問二維數(shù)組元素9 inti,j;10 //使用指針遍歷二維數(shù)組

11 for(i=0;i<3;i++){ //外層循環(huán)遍歷行

12 for(j=0;j<4;j++){ //內(nèi)層循環(huán)遍歷列

13 //通過指針訪問當(dāng)前元素

14 printf("%d",*(*(a+i)+j));15 }16 printf("\n");17 }18 return0;19 }6.2.2指針與二維數(shù)組當(dāng)將二維數(shù)組a[i][j]抽象為一維數(shù)組時(shí),數(shù)組地址每+1,地址向右偏移一行,即偏移sizeof(int)*j。例6-7 通過數(shù)組指針打印元素地址1 #include<stdio.h>2 intmain()3 {4 inta[3][4]={5 {1,2,3,4},6 {5,6,7,8},7 {9,10,11,12}8 };9 inti,j;10 //使用指針遍歷一維數(shù)組a(元素抽象為一維數(shù)組)

11 for(i=0;i<3;i++)12 printf("%d",a+i); //數(shù)組名本身即為指針

13 return0;14 }6.2.2指針與二維數(shù)組當(dāng)將二維數(shù)組a[i][j]抽象為一維數(shù)組時(shí),數(shù)組地址每+1,地址向右偏移一行,即偏移sizeof(int)*j。例6-7 通過數(shù)組指針打印元素地址1 #include<stdio.h>2 intmain()3 {4 inta[3][4]={5 {1,2,3,4},6 {5,6,7,8},7 {9,10,11,12}8 };9 inti,j;10 //使用指針遍歷一維數(shù)組a(元素抽象為一維數(shù)組)

11 for(i=0;i<3;i++)12 printf("%d",a+i); //數(shù)組名本身即為指針

13 return0;14 }6.2.3指針數(shù)組3HTML5的優(yōu)勢6.2.3指針數(shù)組指針數(shù)組是一種特殊的數(shù)組,其元素不是基本數(shù)據(jù)類型(如int、float等)或其他復(fù)合數(shù)據(jù)類型(如結(jié)構(gòu)體)的變量,而是指針。1.定義指針數(shù)組在C語言中,定義指針數(shù)組的基本語法如下:類型*數(shù)組名[數(shù)組大小];以上語法中:類型是指針?biāo)赶虻臄?shù)據(jù)類型數(shù)組名是指針數(shù)組的名稱數(shù)組大小是數(shù)組中元素的數(shù)量HTML5的優(yōu)勢6.2.3指針數(shù)組例如想要一個(gè)指針數(shù)組來存儲三個(gè)整數(shù)變量的地址,可以這樣定義:intvar1=1,var2=2,var3=3;int*ptrArray[3];ptrArray[0]=&var1;ptrArray[1]=&var2;ptrArray[2]=&var3;HTML5的優(yōu)勢6.2.3指針數(shù)組2.應(yīng)用指針數(shù)組指針數(shù)組可以與二維數(shù)組結(jié)合使用,例如將二維數(shù)組的每行元素的地址依次賦給指針數(shù)組中的元素,指針數(shù)組就與二維數(shù)組產(chǎn)生了聯(lián)系。1 #include<stdio.h>2 intmain()3 {4 inta[3][4]={5 {1,2,3,4},6 {5,6,7,8},7 {9,10,11,12}8 };

9 //定義一個(gè)包含3個(gè)元素的指針數(shù)組

10 int*ptr[3];11 inti,j;12 //將二維數(shù)組a的3個(gè)行地址賦給指針數(shù)組的3個(gè)元素

13 for(i=0;i<3;i++)14 ptr[i]=a+i; 15 //借助指針數(shù)組遍歷二維數(shù)組

16 for(i=0;i<3;i++){//外層循環(huán)遍歷行

17 for(j=0;j<4;j++){ //內(nèi)層循環(huán)遍歷列

18 printf("%d",*(ptr[i]+j));19 }20 printf("\n");21 }22 return0;23 }HTML5的優(yōu)勢6.2.1指針與一維數(shù)組2.應(yīng)用指針數(shù)組指針數(shù)組可以與二維數(shù)組結(jié)合使用,例如將二維數(shù)組的每行元素的地址依次賦給指針數(shù)組中的元素,指針數(shù)組就與二維數(shù)組產(chǎn)生了聯(lián)系。1 #include<stdio.h>2 intmain()3 {4 inta[3][4]={5 {1,2,3,4},6 {5,6,7,8},7 {9,10,11,12}8 };

9 //定義一個(gè)包含3個(gè)元素的指針數(shù)組

10 int*ptr[3];11 inti,j;12 //將二維數(shù)組a的3個(gè)行地址賦給指針數(shù)組的3個(gè)元素

13 for(i=0;i<3;i++)14 ptr[i]=a+i; 15 //借助指針數(shù)組遍歷二維數(shù)組

16 for(i=0;i<3;i++){//外層循環(huán)遍歷行

17 for(j=0;j<4;j++){ //內(nèi)層循環(huán)遍歷列

18 printf("%d",*(ptr[i]+j));19 }20 printf("\n");21 }22 return0;23 }6.3 指針與字符串HTML5的優(yōu)勢6.3 指針與字符串示例中str是一個(gè)字符數(shù)組,它包含了字符串"Hello,World!"以及一個(gè)隱式的空字符('\0')作為字符串的結(jié)束標(biāo)志。charstr[]="Hello,World!";char*str="Hello,World!";chara[]="Hello,World!";char*str=a;在本章之前,我們?nèi)绾味x字符串?使用指針定義字符串。示例如下:6.4 指針與函數(shù)HTML5的優(yōu)勢

解決了跨瀏覽器的問題

新增多個(gè)新特性

(語義化標(biāo)簽、多媒體標(biāo)簽、canvas元素、本地存儲等)

用戶優(yōu)先原則

化繁為簡的優(yōu)勢學(xué)習(xí)內(nèi)容6.4.1指針作為函數(shù)參數(shù)6.4.2函數(shù)指針6.4.3函數(shù)指針作為函數(shù)參數(shù)6.4.4函數(shù)指針數(shù)組6.4.5指針作為函數(shù)返回值6.4.1指針作為函數(shù)參數(shù)1HTML5的優(yōu)勢6.4.1指針作為函數(shù)參數(shù)將指針作為函數(shù)參數(shù),可實(shí)現(xiàn)在函數(shù)中直接訪問和修改外部變量的值。1 #include<stdio.h>2 voidmodifyValue(int*ptr)3 {4 *ptr=10; //修改指針?biāo)缸兞康闹?/p>

5 }6 intmain()7 {8 intvalue=5;9 modifyValue(&value); //傳遞value的地址

10 printf("修改后的值為:%d\n",value); //輸出:1011 return0;12 }HTML5的優(yōu)勢6.4.1指針作為函數(shù)參數(shù)將指針作為函數(shù)參數(shù),可實(shí)現(xiàn)在函數(shù)中直接訪問和修改外部變量的值。1 #include<stdio.h>2 voidmodifyValue(int*ptr)3 {4 *ptr=10; //修改指針?biāo)缸兞康闹?/p>

5 }6 intmain()7 {8 intvalue=5;9 modifyValue(&value); //傳遞value的地址

10 printf("修改后的值為:%d\n",value); //輸出:1011 return0;12 }HTML5的優(yōu)勢6.4.1指針作為函數(shù)參數(shù)指針作為函數(shù)參數(shù)在C語言中有著廣泛的應(yīng)用,它允許函數(shù)直接訪問和修改主調(diào)函數(shù)中變量的值,而無需通過返回值來傳遞結(jié)果。這種機(jī)制在處理大型數(shù)據(jù)結(jié)構(gòu)(如數(shù)組、結(jié)構(gòu)體)時(shí)特別有用,因?yàn)樗梢员苊鈴?fù)制整個(gè)數(shù)據(jù)結(jié)構(gòu)所帶來的性能開銷。HTML5的優(yōu)勢6.4.1指針作為函數(shù)參數(shù)1.修改數(shù)組元素1 #include<stdio.h>2 voidmodifyArray(int*arr,intn,intnewValue)3 {4 inti;5 for(i=0;i<n;i++){6 arr[i]=newValue;//直接修改原數(shù)組的元素

7 }8 }9 intmain()10 {11 intmyArray[5]={1,2,3,4,5};12 modifyArray(myArray,5,10); //將數(shù)組所有元素修改為1013 inti;14 for(i=0;i<5;i++)15 {16 printf("%d",myArray[i]); //輸出修改后的數(shù)組

17 }18 return0;19 }HTML5的優(yōu)勢6.4.1指針作為函數(shù)參數(shù)1.修改數(shù)組元素1 #include<stdio.h>2 voidmodifyArray(int*arr,intn,intnewValue)3 {4 inti;5 for(i=0;i<n;i++){6 arr[i]=newValue;//直接修改原數(shù)組的元素

7 }8 }9 intmain()10 {11 intmyArray[5]={1,2,3,4,5};12 modifyArray(myArray,5,10); //將數(shù)組所有元素修改為1013 inti;14 for(i=0;i<5;i++)15 {16 printf("%d",myArray[i]); //輸出修改后的數(shù)組

17 }18 return0;19 }HTML5的優(yōu)勢6.4.1指針作為函數(shù)參數(shù)2.交換變量的值1 #include<stdio.h>2 voidswap(int*a,int*b)3 {4 inttemp=*a;5 *a=*b;6 *b=temp;7 }8 intmain()9 {10 intx=5,y=10;11 swap(&x,&y); //交換x和y的值

12 printf("x=%d,y=%d\n",x,y); //輸出交換后的結(jié)果

13 return0;14 }HTML5的優(yōu)勢6.4.1指針作為函數(shù)參數(shù)2.交換變量的值1 #include<stdio.h>2 voidswap(int*a,int*b)3 {4 inttemp=*a;5 *a=*b;6 *b=temp;7 }8 intmain()9 {10 intx=5,y=10;11 swap(&x,&y); //交換x和y的值

12 printf("x=%d,y=%d\n",x,y); //輸出交換后的結(jié)果

13 return0;14 }6.4.2函數(shù)指針2HTML5的優(yōu)勢6.4.2函數(shù)指針在C語言中,函數(shù)的指針是一種特殊的指針類型,它存儲了函數(shù)的地址,而不是變量的地址。通過函數(shù)指針,我們可以間接地調(diào)用函數(shù),這在許多高級編程技術(shù)和數(shù)據(jù)結(jié)構(gòu)中非常有用,比如回調(diào)函數(shù)、函數(shù)表、動(dòng)態(tài)分派等。1.聲明函數(shù)指針聲明函數(shù)指針,首先需要確定函數(shù)的類型,即函數(shù)的返回類型和參數(shù)類型列表。然后,可以使用以下語法來聲明指向該類型函數(shù)的指針:返回類型(*指針變量名)(參數(shù)類型列表);例如,有一個(gè)函數(shù)intadd(inta,intb);,那么指向該函數(shù)的指針可以這樣聲明:int(*funcPtr)(int,int);HTML5的優(yōu)勢6.4.2函數(shù)指針2.給函數(shù)指針賦值在C語言中,函數(shù)名本身就表示函數(shù)的地址,所以可以直接將函數(shù)名賦給函數(shù)指針。intadd(inta,intb){returna+b;}intmain(){int(*funcPtr)(int,int)=add; //將add函數(shù)的地址賦給funcPtr…}HTML5的優(yōu)勢6.4.2函數(shù)指針3.使用函數(shù)指針通過函數(shù)指針調(diào)用函數(shù)的方式,與調(diào)用普通函數(shù)一致。因?yàn)楹瘮?shù)指針與函數(shù)名都是地址,可以淺顯地理解為函數(shù)指針是函數(shù)的別名,通過原函數(shù)名,或函數(shù)指針均可以以通用的方法調(diào)用函數(shù)。1 #include<stdio.h>2 intadd(inta,intb)3 {4 returna+b;5 }6 intmain()7 {8 int(*funcPtr)(int,int)=add; //將add函數(shù)的地址賦給funcPtr9 intsum1=funcPtr(5,3); //通過funcPtr調(diào)用add函數(shù)

10 printf("sum1=%d\n",sum1); //輸出結(jié)果

11 intsum2=add(5,3); //通過funcPtr調(diào)用add函數(shù)

12 printf("sum2=%d\n",sum2); //輸出結(jié)果

13 return0;14 }HTML5的優(yōu)勢6.4.2函數(shù)指針3.使用函數(shù)指針通過函數(shù)指針調(diào)用函數(shù)的方式,與調(diào)用普通函數(shù)一致。因?yàn)楹瘮?shù)指針與函數(shù)名都是地址,可以淺顯地理解為函數(shù)指針是函數(shù)的別名,通過原函數(shù)名,或函數(shù)指針均可以以通用的方法調(diào)用函數(shù)。1 #include<stdio.h>2 intadd(inta,intb)3 {4 returna+b;5 }6 intmain()7 {8 int(*funcPtr)(int,int)=add; //將add函數(shù)的地址賦給funcPtr9 intsum1=funcPtr(5,3); //通過funcPtr調(diào)用add函數(shù)

10 printf("sum1=%d\n",sum1); //輸出結(jié)果

11 intsum2=add(5,3); //通過funcPtr調(diào)用add函數(shù)

12 printf("sum2=%d\n",sum2); //輸出結(jié)果

13 return0;14 }6.4.3函數(shù)指針作為函數(shù)參數(shù)3HTML5的優(yōu)勢6.4.3函數(shù)指針作為函數(shù)參數(shù)例6-13 函數(shù)指針作為函數(shù)參數(shù)1 #include<stdio.h>2 //簡單的函數(shù),接受整數(shù)參數(shù)并打印

3 voidprintInt(intn)4 {5 printf("數(shù)字是:%d\n",n);6 }

7 //另一個(gè)函數(shù),它接受一個(gè)整數(shù)和一個(gè)函數(shù)指針作為參數(shù)

8 //該函數(shù)指針指向一個(gè)接受整數(shù)參數(shù)并返回void的函數(shù)

9 voidexecuteFunction(intnumber,void(*funcPtr)(int))10 {11 //調(diào)用通過函數(shù)指針傳遞的函數(shù)

12 funcPtr(number);13 }14 intmain()15 {16 //將printInt函數(shù)的地址作為參數(shù)傳遞給executeFunction17 executeFunction(10,printInt);18 //注意:這里不需要&來獲取函數(shù)的地址,因?yàn)楹瘮?shù)名本身就代表其地址

19 return0;20 }函數(shù)指針的另一個(gè)常見用途是作為參數(shù)傳遞給其他函數(shù),以編寫更加靈活和可重用的代碼。HTML5的優(yōu)勢6.4.3函數(shù)指針作為函數(shù)參數(shù)例6-13 函數(shù)指針作為函數(shù)參數(shù)1 #include<stdio.h>2 //簡單的函數(shù),接受整數(shù)參數(shù)并打印

3 voidprintInt(intn)4 {5 printf("數(shù)字是:%d\n",n);6 }

7 //另一個(gè)函數(shù),它接受一個(gè)整數(shù)和一個(gè)函數(shù)指針作為參數(shù)

8 //該函數(shù)指針指向一個(gè)接受整數(shù)參數(shù)并返回void的函數(shù)

9 voidexecuteFunction(intnumber,void(*funcPtr)(int))10 {11 //調(diào)用通過函數(shù)指針傳遞的函數(shù)

12 funcPtr(number);13 }14 intmain()15 {16 //將printInt函數(shù)的地址作為參數(shù)傳遞給executeFunction17 executeFunction(10,printInt);18 //注意:這里不需要&來獲取函數(shù)的地址,因?yàn)楹瘮?shù)名本身就代表其地址

19 return0;20 }函數(shù)指針的另一個(gè)常見用途是作為參數(shù)傳遞給其他函數(shù),以編寫更加靈活和可重用的代碼。6.4.4函數(shù)指針數(shù)組4HTML5的優(yōu)勢6.4.4函數(shù)指針數(shù)組例6-14 函數(shù)指針數(shù)組1 #include<stdio.h>2 //定義幾個(gè)函數(shù),它們具有相同的返回類型和參數(shù)列表

3 voidfunc1()4 {5 printf("func1被調(diào)用\n");6 }7 voidfunc2()8 {9 printf("func2被調(diào)用\n");10 }11 voidfunc3()12 {13 printf("func3被調(diào)用\n");14 }15 intmain()16 {17 //定義一個(gè)函數(shù)指針數(shù)組,該數(shù)組的元素是指向無參數(shù)、返回void的函數(shù)的指針

18 void(*funcArray[])()={func1,func2,func3};19 //遍歷數(shù)組并調(diào)用每個(gè)函數(shù)

20 inti;21 for(i=0;i<sizeof(funcArray)/sizeof(funcArray[0]);i++)22 {23 funcArray[i]();//調(diào)用函數(shù)指針指向的函數(shù)

24 }25 return0;26 }函數(shù)指針數(shù)組是一種特殊的數(shù)組,其元素是指向函數(shù)的指針。這種數(shù)組允許你存儲多個(gè)函數(shù)的地址,并在需要時(shí)遍歷數(shù)組來調(diào)用這些函數(shù)。HTML5的優(yōu)勢6.4.4函數(shù)指針數(shù)組例6-14 函數(shù)指針數(shù)組1 #include<stdio.h>2 //定義幾個(gè)函數(shù),它們具有相同的返回類型和參數(shù)列表

3 voidfunc1()4 {5 printf("func1被調(diào)用\n");6 }7 voidfunc2()8 {9 printf("func2被調(diào)用\n");10 }11 voidfunc3()12 {13 printf("func3被調(diào)用\n");14 }15 intmain()16 {17 //定義一個(gè)函數(shù)指針數(shù)組,該數(shù)組的元素是指向無參數(shù)、返回void的函數(shù)的指針

18 void(*funcArray[])()={func1,func2,func3};19 //遍歷數(shù)組并調(diào)用每個(gè)函數(shù)

20 inti;21 for(i=0;i<sizeof(funcArray)/sizeof(funcArray[0]);i++)22 {23 funcArray[i]();//調(diào)用函數(shù)指針指向的函數(shù)

24 }25 return0;26 }函數(shù)指針數(shù)組是一種特殊的數(shù)組,其元素是指向函數(shù)的指針。這種數(shù)組允許你存儲多個(gè)函數(shù)的地址,并在需要時(shí)遍歷數(shù)組來調(diào)用這些函數(shù)。6.4.5指針作為函數(shù)返回值5HTML5的優(yōu)勢6.4.5指針作為函數(shù)返回值在C語言中,指針可以作為函數(shù)的返回值。這意味著一個(gè)函數(shù)可以返回一個(gè)指向變量的指針,這樣調(diào)用者就可以通過這個(gè)返回的指針來訪問或修改該變量的值。HTML5的優(yōu)勢6.4.5指針作為函數(shù)返回值18 intmain()19 {20 //調(diào)用函數(shù)并接收返回的指針

21 int*myInteger=createInteger();22 if(myInteger!=NULL)23 {24 //如果指針不是NULL,則通過指針訪問并打印整數(shù)的值

25 printf("值:%d\n",*myInteger);26 //使用完畢后,釋放分配的內(nèi)存

27 free(myInteger);28 }29 else30 {31 //如果指針是NULL,則打印錯(cuò)誤信息

32 printf("內(nèi)存分配失敗\n");33 }34 return0;35 }1 #include<stdio.h>2 #include<stdlib.h> //為了使用malloc和free3 //定義一個(gè)函數(shù),它返回一個(gè)指向整數(shù)的指針

4 int*createInteger()5 {6 //動(dòng)態(tài)分配一個(gè)整數(shù)的內(nèi)存空間

7 int*ptr=(int*)malloc(sizeof(int));8 if(ptr==NULL)9 {10 //如果內(nèi)存分配失敗,則返回NULL11 returnNULL;12 }13 //初始化整數(shù)的值為1014 *ptr=10;15 //返回指向整數(shù)的指針

16 returnptr;17 }HTML5的優(yōu)勢6.4.5指針作為函數(shù)返回值18 intmain()19 {20 //調(diào)用函數(shù)并接收返回的指針

21 int*myInteger=createInteger();22 if(myInteger!=NULL)23 {24 //如果指針不是NULL,則通過指針訪問并打印整數(shù)的值

25 printf("值:%d\n",*myInteger);26 //使用完畢后,釋放分配的內(nèi)存

27 free(myInteger);28 }29 else30 {31 //如果指針是NULL,則打印錯(cuò)誤信息

32 printf("內(nèi)存分配失敗\n");33 }34 return0;35 }1 #include<stdio.h>2 #include<stdlib.h> //為了使用malloc和free3 //定義一個(gè)函數(shù),它返回一個(gè)指向整數(shù)的指針

4 int*createInteger()5 {6 //動(dòng)態(tài)分配一個(gè)整數(shù)的內(nèi)存空間

7 int*ptr=(int*)malloc(sizeof(int));8 if(ptr==NULL)9 {10 //如果內(nèi)存分配失敗,則返回NULL11 returnNULL;12 }13 //初始化整數(shù)的值為1014 *ptr=10;15 //返回指向整數(shù)的指針

16 returnptr;17 }6.5 二級指針HTML5的優(yōu)勢6.5 二級指針二級指針(也稱為指針的指針)是一個(gè)存儲了指針地址的指針。示例如下:int**pptr; //pptr是一個(gè)指向int*類型指針的指針給二級指針賦值時(shí),需要確保你給它的是一個(gè)指針的地址,而這個(gè)指針本身又指向了某種數(shù)據(jù)類型。intvalue=35;int*ptr=&value;//ptr是一個(gè)指向int的指針int**pptr=&ptr;//pptr是一個(gè)指向ptr的指針(即二級指針)HTML5的優(yōu)勢6.5 二級指針給二級指針賦值時(shí),需要確保你給它的是一個(gè)指針的地址,而這個(gè)指針本身又指向了某種數(shù)據(jù)類型。intvalue=35;int*ptr=&value;//ptr是一個(gè)指向int的指針int**pptr=&ptr;//pptr是一個(gè)指向ptr的指針(即二級指針)訪問二級指針指向的值,需要使用兩次取值操作符(*)。示例如下:printf("%d\n",**pptr);//輸出value的值,即35HTML5的優(yōu)勢6.5 二級指針1 #include<stdio.h>2 intmain(){3 intvalue=10;4 int*ptr=&value;//ptr是一個(gè)指向整數(shù)的指針

5 int**pptr=&ptr;//pptr是一個(gè)指向ptr的指針,即二級指針

6 //通過pptr訪問value7 printf("通過二級指針訪問值:%d\n",**pptr);//輸出108 //修改ptr指向的值

9 **pptr=20;10 printf("通過二級指針修改后的值:%d\n",value);//輸出2011 return0;12 }HTML5的優(yōu)勢6.5 二級指針1 #include<stdio.h>2 intmain(){3 intvalue=10;4 int*ptr=&value;//ptr是一個(gè)指向整數(shù)的指針

5 int**pptr=&ptr;//pptr是一個(gè)指向ptr的指針,即二級指針

6 //通過pptr訪問value7 printf("通過二級指針訪問值:%d\n",**pptr);//輸出108 //修改ptr指向的值

9 **pptr=20;10 printf("通過二級指針修改后的值:%d\n",value);//輸出2011 return0;12 }6.6 main函數(shù)參數(shù)HTML5的優(yōu)勢6.6 main函數(shù)參數(shù)標(biāo)準(zhǔn)C語言允許main函數(shù)帶有兩個(gè)參數(shù),這兩個(gè)參數(shù)提供了關(guān)于程序啟動(dòng)時(shí)的命令行參數(shù)的信息。intmain(intargc,char*argv[]){//程序代碼

return0;}argc:這是一個(gè)整數(shù),表示傳遞給程序的命令行參數(shù)的數(shù)量。至少為1,因?yàn)榈谝粋€(gè)參數(shù)(argv[0])是程序的名稱或路徑。argv:這是一個(gè)指向字符指針數(shù)組的指針,其中每個(gè)元素都是一個(gè)指向null終止的字符串的指針,這些字符串包含了傳遞給程序的命令行參數(shù)。第一個(gè)參數(shù)(argv[0])是程序的名稱或路徑,隨后的參數(shù)是程序啟動(dòng)時(shí)從命令行傳遞給程序的參數(shù)。HTML5的優(yōu)勢6.6 main函數(shù)參數(shù)標(biāo)準(zhǔn)C語言允許main函數(shù)帶有兩個(gè)參數(shù),這兩個(gè)參數(shù)提供了關(guān)于程序啟動(dòng)時(shí)的命令行參數(shù)的信息。intmain(intargc,char*argv[]){//程序代碼

return0;}main函數(shù)的實(shí)參列表可以為空。雖然main函數(shù)有參數(shù)列表,但main函數(shù)并不直接支持將自定義指針作為參數(shù),因?yàn)閙ain函數(shù)的參數(shù)是由操作系統(tǒng)在程序啟動(dòng)時(shí)設(shè)定的,用于傳遞命令行參數(shù)。6.7 動(dòng)態(tài)內(nèi)存管理HTML5的優(yōu)勢

解決了跨瀏覽器的問題

新增多個(gè)新特性

(語義化標(biāo)簽、多媒體標(biāo)簽、canvas元素、本地存儲等)

用戶優(yōu)先原則

化繁為簡的優(yōu)勢學(xué)習(xí)內(nèi)容6.7.1內(nèi)存空間申請6.7.2內(nèi)存空間釋放6.7.3內(nèi)存空間操作6.7.1內(nèi)存空間申請1HTML5的優(yōu)勢6.7.1內(nèi)存空間申請C語言中常用的內(nèi)存申請函數(shù)有malloc、calloc、realloc,這些函數(shù)都定義在頭文件stdlib.h中。1.malloc函數(shù)當(dāng)你需要在程序運(yùn)行時(shí)為變量或數(shù)據(jù)結(jié)構(gòu)分配一定大小的內(nèi)存空間時(shí),就可以使用malloc函數(shù)。malloc函數(shù)的原型如下:void*malloc(size_tsize);malloc函數(shù)的參數(shù)size是需要分配的內(nèi)存大?。ㄒ宰止?jié)為單位);內(nèi)存開辟成功時(shí),返回一個(gè)指向分配的內(nèi)存塊的指針;失敗時(shí),返回NULL指針。HTML5的優(yōu)勢6.7.1內(nèi)存空間申請1 #include<stdio.h>2 #include<stdlib.h>3 intmain(){4 int*ptr,i;5 intn=0;//用于設(shè)置需要存儲的數(shù)據(jù)數(shù)量

6 scanf("%d",&n);7 //使用malloc分配內(nèi)存

8 ptr=(int*)malloc(n*sizeof(int));9 if(ptr==NULL)10{11 //處理內(nèi)存分配失敗的情況

12 printf("內(nèi)存分配失敗\n");13 return1;14 }

15 //使用分配的內(nèi)存

16 for(i=0;i<n;i++)17 {18 ptr[i]=i*i;//示例:存儲平方數(shù)

19 }20 //打印結(jié)果

21 for(i=0;i<n;i++)22 {23 printf("%d",ptr[i]);24 }25 //釋放內(nèi)存

26 free(ptr);27 return0;28 }HTML5的優(yōu)勢6.7.1內(nèi)存空間申請使用malloc函數(shù)時(shí)需要注意:(1)檢查返回值:在使用malloc分配的內(nèi)存之前,總是應(yīng)該檢查它是否返回了NULL。如果malloc返回NULL,表示內(nèi)存分配失敗,這通常是因?yàn)橄到y(tǒng)內(nèi)存不足。(2)類型轉(zhuǎn)換:雖然malloc返回一個(gè)void*類型的指針,但在大多數(shù)情況下,你需要將它轉(zhuǎn)換為適當(dāng)?shù)念愋?。在C語言中,這種轉(zhuǎn)換是隱式的,但在C++中是必需的。上面的示例中顯式地進(jìn)行了類型轉(zhuǎn)換(int*),但在純C代碼中,這種轉(zhuǎn)換是可選的。(3)內(nèi)存釋放:使用完malloc分配的內(nèi)存后,應(yīng)該使用free函數(shù)將其釋放回堆中。不釋放內(nèi)存會導(dǎo)致內(nèi)存泄漏,即程序占用的內(nèi)存量不斷增加,最終可能導(dǎo)致系統(tǒng)資源耗盡。HTML5的優(yōu)勢6.7.1內(nèi)存空間申請使用malloc函數(shù)時(shí)需要注意:(4)避免重復(fù)釋放:不要對同一個(gè)內(nèi)存塊調(diào)用free多次,這會導(dǎo)致未定義行為,通常是程序崩潰。(5)內(nèi)存對齊:malloc分配的內(nèi)存塊會按照系統(tǒng)的內(nèi)存對齊要求來對齊,這有助于提高內(nèi)存訪問的效率。但是,這也意味著分配的內(nèi)存塊可能比請求的大小稍大一些。HTML5的優(yōu)勢6.7.1內(nèi)存空間申請1 #include<stdio.h>2 #include<stdlib.h>3 intmain(){4 int*ptr,i;5 intn=0;//用于設(shè)置需要存儲的數(shù)據(jù)數(shù)量

6 scanf("%d",&n);7 //使用malloc分配內(nèi)存

8 ptr=(int*)malloc(n*sizeof(int));9 if(ptr==NULL)10{11 //處理內(nèi)存分配失敗的情況

12 printf("內(nèi)存分配失敗\n");13 return1;14 }

15 //使用分配的內(nèi)存

16 for(i=0;i<n;i++)17 {18 ptr[i]=i*i;//示例:存儲平方數(shù)

19 }20 //打印結(jié)果

21 for(i=0;i<n;i++)22 {23 printf("%d",ptr[i]);24 }25 //釋放內(nèi)存

26 free(ptr);27 return0;28 }HTML5的優(yōu)勢6.7.1內(nèi)存空間申請2.calloc函數(shù)calloc函數(shù)用于動(dòng)態(tài)分配內(nèi)存,并自動(dòng)將分配的內(nèi)存初始化為零。calloc的函數(shù)原型如下:void*malloc(size_tsize);calloc函數(shù)的參數(shù)num為需要分配的元素?cái)?shù)量,size是每個(gè)元素需要分配的內(nèi)存大?。ㄒ宰止?jié)為單位);內(nèi)存開辟成功時(shí),返回一個(gè)指向分配的內(nèi)存塊的指針;失敗時(shí),返回NULL指針。HTML5的優(yōu)勢6.7.1內(nèi)存空間申請1 #include<stdio.h>2 #include<stdlib.h>3 intmain(){4 int*ptr,i;5 intn=0;//用于設(shè)置需要存儲的數(shù)據(jù)數(shù)量

6 scanf("%d",&n);7 //使用calloc分配內(nèi)存

8 ptr=(int*)calloc(n,sizeof(int));9 if(ptr==NULL)10 {11 //處理內(nèi)存分配失敗的情況

12 printf("內(nèi)存分配失敗\n");13 return1;14 }

15 //使用分配的內(nèi)存

16 for(i=0;i<n;i++)17 {18 ptr[i]=i*i;//示例:存儲平方數(shù)

19 }20 //打印結(jié)果

21 for(i=0;i<n;i++)22 {23 printf("%d",ptr[i]);24 }25 //釋放內(nèi)存

26 free(ptr);27 return0;28 }HTML5的優(yōu)勢6.7.1內(nèi)存空間申請3.realloc函數(shù)realloc函數(shù)用于重新分配之前已經(jīng)分配的內(nèi)存塊的大小,其函數(shù)原型如下:void*realloc(void*ptr,size_tnewSize);realloc函數(shù)的參數(shù)ptr是指向之前已經(jīng)分配的內(nèi)存塊的指針,這個(gè)內(nèi)存塊應(yīng)該是通過malloc、calloc或realloc函數(shù)分配的,如果ptr是NULL,則realloc的行為類似于malloc,分配一個(gè)新的內(nèi)存塊;參數(shù)newSize是新的內(nèi)存塊的大?。ㄒ宰止?jié)為單位)。HTML5的優(yōu)勢6.7.1內(nèi)存空間申請3.realloc函數(shù)realloc函數(shù)用于重新分配之前已經(jīng)分配的內(nèi)存塊的大小,其函數(shù)原型如下:void*realloc(void*ptr,size_tnewSize);如果realloc成功重新分配了內(nèi)存塊,則返回一個(gè)指向新的內(nèi)存塊的指針,這個(gè)指針應(yīng)該被用來訪問新的內(nèi)存塊;如果realloc無法重新分配內(nèi)存塊(例如,因?yàn)橄到y(tǒng)內(nèi)存不足),則返回NULL。在這種情況下,原來的內(nèi)存塊不會被釋放,因此原有的數(shù)據(jù)仍然有效,但需要通過原來的指針訪問。HTML5的優(yōu)勢6.7.1內(nèi)存空間申請使用realloc函數(shù)時(shí)需要通用需要注意:(1)檢查返回值:在使用realloc分配的內(nèi)存之前,總是應(yīng)該檢查它是否返回了NULL。如果realloc返回NULL,表示內(nèi)存重新分配失敗,此時(shí)原有的內(nèi)存塊仍然有效,但不應(yīng)再嘗試通過realloc返回的指針訪問它。(2)內(nèi)存移動(dòng):如果realloc需要擴(kuò)展內(nèi)存塊,并且原來的內(nèi)存塊后面沒有足夠的連續(xù)空間,則realloc可能會將內(nèi)存塊移動(dòng)到堆上的另一個(gè)位置。在這種情況下,realloc返回的指針將指向新的內(nèi)存位置,而原來的指針將變得無效。因此,在調(diào)用realloc后,應(yīng)該總是使用它返回的指針來訪問內(nèi)存塊。HTML5的優(yōu)勢6.7.1內(nèi)存空間申請使用realloc函數(shù)時(shí)需要通用需要注意:(3)內(nèi)存釋放:如果realloc成功,并且你不再需要原來的內(nèi)存塊(例如,因?yàn)閞ealloc返回了新的內(nèi)存位置),則應(yīng)該使用free函數(shù)來釋放原來的內(nèi)存塊,以避免內(nèi)存泄漏。但是,請注意,在realloc成功并返回新指針后,你應(yīng)該立即使用新指針來替換舊指針,并在之后只使用新指針來訪問內(nèi)存塊。(4)縮容:如果newSize小于原始內(nèi)存塊的大小,realloc可能會減少內(nèi)存塊的大小

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論