資源描述:
《c語(yǔ)言從入門(mén)到精通第12章》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第12章指針的深入研究——指針進(jìn)階指針與數(shù)組指針與字符串綜合應(yīng)用——報(bào)數(shù)游戲跟我上機(jī)第12章指針的深入研究——指針進(jìn)階指針與數(shù)組指針與字符串綜合應(yīng)用——報(bào)數(shù)游戲跟我上機(jī)第12章指針的深入研究——指針進(jìn)階指針與數(shù)組指針與字符串綜合應(yīng)用——報(bào)數(shù)游戲跟我上機(jī)第12章指針的深入研究——指針進(jìn)階指針與數(shù)組指針與字符串綜合應(yīng)用——報(bào)數(shù)游戲跟我上機(jī)第12章指針的深入研究——指針進(jìn)階指針與數(shù)組指針與字符串綜合應(yīng)用——報(bào)數(shù)游戲跟我上機(jī)12.1指針與數(shù)組12.1.1指針與數(shù)組12.1.2數(shù)組名作為指針12.1.3指針與多維數(shù)組12.1.4指針與數(shù)組參數(shù)12.1.1指針與數(shù)組指針用于存儲(chǔ)地址,他和數(shù)組名緊密的聯(lián)系在
2、一起。下圖就顯示了一個(gè)數(shù)組名稱為grade,包含5個(gè)整型數(shù)據(jù)的一維數(shù)組,這里每個(gè)整型元素占用4個(gè)字節(jié)。12.1.1指針與數(shù)組訪問(wèn)數(shù)組元素,我們可以使用下標(biāo)來(lái)實(shí)現(xiàn),比如我們要訪問(wèn)數(shù)組元素grade[3],在之前的章節(jié)里我們?cè)敿?xì)的講解過(guò),但是那時(shí)使用的方法其實(shí)隱藏了數(shù)組每一個(gè)元素的地址。根據(jù)之前講過(guò)的地址的概念,加之我們已知的數(shù)組的特點(diǎn),這個(gè)特點(diǎn)就是數(shù)組在內(nèi)存總占用一塊連續(xù)的存儲(chǔ)區(qū)域,這樣的話,如果我們知道數(shù)組的首地址,針對(duì)grade這個(gè)數(shù)組,就是已知grade[0]的地址,我們就可以通過(guò)增減偏移量,得到garde[3]的地址,從而訪問(wèn)到garde[3]的元素值12.1.1指針與數(shù)組&grade[
3、3]=&grade[0]+3*4上面表達(dá)式的含義是gradep[3]的地址等于grade[0]地址加上12。寫(xiě)成以下的通式:數(shù)組中下標(biāo)為N元素的地址=數(shù)組的首地址+N*sizeof(DataType)例如:intgrade[5];/*定義array為包含5個(gè)整型數(shù)據(jù)的數(shù)組*/int*p;/*定義p為指向整型變量的指針變量*/p=&grade[0];12.1.1指針與數(shù)組【范例12-1】使用指針訪問(wèn)數(shù)組元素,分別使用下標(biāo)和指針訪問(wèn)數(shù)組元素01#include02intmain(void)03{04inti;05intgrade[]={2,5,9,4,6};06int*p;07p
4、=&grade[0];/*指針指向*/08printf("使用下標(biāo)訪問(wèn)數(shù)組元素:");09for(i=0;i<5;i++)/*下標(biāo)訪問(wèn)*/10printf("數(shù)組grade的第%d個(gè)元素是%d",i,grade[i]);11printf("使用數(shù)組指針訪問(wèn)數(shù)組元素:");12for(i=0;i<5;i++)/*指針訪問(wèn)*/13printf("數(shù)組grade的第%d個(gè)元素是%d",i,*(p+i));14return0;15}12.1.1指針與數(shù)組數(shù)組元素下標(biāo)符號(hào)指針?lè)?hào)元素0grade[0]*p元素1grade[1]*(p+1)元素2grade[2]*(p+2)元素3grade
5、[3]*(p+3)元素4grade[4]*(p+4)需要注意的是*(p+i)表達(dá)式中的括號(hào)是必須有的,不能省略,如果我們遺漏了小括號(hào),將變成這樣的表達(dá)式*p+i,它的含義之前在指針變量處已經(jīng)進(jìn)行了講解,是在p所指向的存儲(chǔ)單元的數(shù)值基礎(chǔ)上在i,因?yàn)槲覀兪冀K沒(méi)有改變指針p的指向。12.1.2數(shù)組名作為指針每個(gè)創(chuàng)建的數(shù)組,數(shù)組名就成為編譯器為這個(gè)數(shù)組所創(chuàng)建的指針常量名稱,存儲(chǔ)的是數(shù)組第一個(gè)元素的起始地址,也是我們所說(shuō)的數(shù)組首地址。這樣,我們就有多了一種獲取數(shù)組元素地址的手段。如【范例12-1】中代碼“p=&grade[0];”就可以改寫(xiě)為“p=grade;”。12.1.2數(shù)組名作為指針【范例12-2
6、】使用數(shù)組名作為指針訪問(wèn)數(shù)組元素。01#include02intmain(void)03{04inti;05intgrade[]={2,5,9,4,6};06int*p;07p=grade;/*指針賦值*/08printf("使用數(shù)組名訪問(wèn)數(shù)組元素:");09for(i=0;i<5;i++)/*使用數(shù)組名*/10printf("數(shù)組grade的第%d個(gè)元素是%d",i,*(grade+i));11printf("使用數(shù)組指針訪問(wèn)數(shù)組元素:");12for(i=0;i<5;i++)/*使用指針變量*/13printf("數(shù)組grade的第%d個(gè)元素是%d",i,
7、*(p+i));14return0;15}12.1.2數(shù)組名作為指針面的代碼大家一起來(lái)分析一下,看看錯(cuò)了嗎?grade=grade+3;結(jié)果是有誤。原因是,grade是數(shù)組名,它是編譯器為這個(gè)數(shù)組創(chuàng)建的指針常量,常量當(dāng)然是不能夠再賦值的。再看下面的代碼,是否有問(wèn)題?p=grade;p=p+3;結(jié)果是正確的。原因是,p是指針變量,它初始值是grade數(shù)組的首地址,之后根據(jù)需要修改了p的值,也就是改變