国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C語(yǔ)言指針初探

2013-04-29 06:02:15姜雪茸
無(wú)線互聯(lián)科技 2013年6期
關(guān)鍵詞:數(shù)組指針C語(yǔ)言

姜雪茸

摘 要:本文從指針的基本概念出發(fā),分別闡述了指針、指針變量、指針與數(shù)組、指針與函數(shù)等幾個(gè)方面的基本概念。

關(guān)鍵詞:C語(yǔ)言;指針;數(shù)組;函數(shù)

1 指針

理解指針首先要了解內(nèi)存,掌握內(nèi)存單元、內(nèi)存單元的地址、內(nèi)存單元的內(nèi)容的基本概念。內(nèi)存是由許多個(gè)大小完全一致的存儲(chǔ)單元構(gòu)成。每一個(gè)存儲(chǔ)單元容量為一個(gè)字節(jié)。為將各存儲(chǔ)單元區(qū)別開(kāi),給每個(gè)存儲(chǔ)單元一個(gè)對(duì)應(yīng)的編號(hào)稱為存儲(chǔ)單元的地址。而存儲(chǔ)單元中存儲(chǔ)的數(shù)據(jù)稱為存儲(chǔ)單元的內(nèi)容。

在計(jì)算機(jī)中,所有數(shù)據(jù)都被放在內(nèi)存中。如果在程序中定義了一個(gè)變量,則程序在編譯過(guò)程中由系統(tǒng)給變量分配適當(dāng)內(nèi)存單元。因此,在程序中使用的變量就是內(nèi)存中某個(gè)存儲(chǔ)單元。例如,程序中定義某字符型變量i=A,編譯時(shí)為其分配地址為2000的一個(gè)存儲(chǔ)單元。則變量i被存放在地址編號(hào)為2000的單元中,此單元中存放的內(nèi)容是A。地址指示出變量所在位置,即按變量地址尋找變量的值,變量的地址就稱為變量的指針。通常用&表示取變量的存儲(chǔ)地址,&i=2000。

2 指針變量

如果將變量i所在單元的地址2000作為數(shù)據(jù)存放在其他存儲(chǔ)單元中(假設(shè)當(dāng)前分配其他單元地址為3000),則變量i被存放在以地址編號(hào)為3000的存儲(chǔ)單元的內(nèi)容2000為地址的單元中。即就是存儲(chǔ)單元3000中存放的是變量i的地址(或指針),則將存儲(chǔ)單元3000定義為變量稱為指針變量,專門用來(lái)存放變量存儲(chǔ)地址的變量稱為指針變量。通常用*表示變量的類型為指針型變量。

3 指針與數(shù)組

3.1 指針和一維數(shù)組

數(shù)組是同類型數(shù)據(jù)的有序集合。數(shù)組中的元素依次順序的存儲(chǔ)在一片連續(xù)的內(nèi)存區(qū)域中,對(duì)數(shù)組的操作依靠數(shù)組元素的下標(biāo)實(shí)現(xiàn),而數(shù)組下標(biāo)代表的是數(shù)組元素所在地址,地址即指針。所以用指針不但可以實(shí)現(xiàn)數(shù)組的操作,而且占用內(nèi)存少,運(yùn)行速度快。

3.2 指針和二維數(shù)組

二維數(shù)組由若干個(gè)一維數(shù)組組成。C語(yǔ)言將二維數(shù)組實(shí)際上定義為一個(gè)一維數(shù)組,而這個(gè)一維數(shù)組的每一個(gè)成員又是一個(gè)一維數(shù)組。假設(shè)定義int *p,a[3][4],i,j;則a數(shù)組由a[0]、a[1]、a[2]三個(gè)元素組成,而a[0]、a[1]、a[2]每個(gè)元素又分別是由4個(gè)整型元素組成的一維數(shù)組。a[0]、a[1]、a[2]依次代表二維數(shù)組每行第一個(gè)元素的地址,二維數(shù)組元素的地址可以由表達(dá)式&a[i][j]求得,或通過(guò)每行的首地址來(lái)表示。如:地址&a[0][0]可以用a[0]+0來(lái)表示,地址&a[0][1]可以用a[0]+1表示;則a[i][j]的地址可用五種方式表示:(1)&a[i][j](2)a[i]+j(3)*(a+i)+j(4)&a[0][0]+4*i+j (5)a[0]+ 4*i+j。由以上通過(guò)地址來(lái)引用二維數(shù)組元素a[i][j]對(duì)應(yīng)有五種方式表達(dá):(1)a[i][j](2)*(a[i]+j)(3)*(*(a+i)+j)(4)(*(a+i))[j](5)*(&a[0][0]+4*i+j)。

4 指針與函數(shù)

4.1 函數(shù)指針

指針可以指向整型變量、字符串、數(shù)組、也可以指向一個(gè)函數(shù)。一個(gè)函數(shù)在編譯是被分配給一個(gè)入口地址。這個(gè)函數(shù)的入口地址就稱為函數(shù)的指針。即用一個(gè)指針變量指向函數(shù),然后通過(guò)該指針變量調(diào)用此函數(shù)。例如:int(*p)(int,int);表示定義了一個(gè)指向函數(shù)的指針變量p,p用來(lái)存放函數(shù)入口地址。若當(dāng)前有函數(shù)int proc(int,int);則p=proc是將函數(shù)proc的入口地址賦給p,而用函數(shù)指針變量調(diào)用函數(shù)時(shí),將(*p)代替函數(shù)名,可以表示為c=(*p)(a,b),其中a,b為實(shí)參。

函數(shù)指針變量通常是用于把指針作為參數(shù)傳遞到其他函數(shù)。函數(shù)的參數(shù)可以是多種類型的變量,指向函數(shù)的指針也可以作為參數(shù)實(shí)現(xiàn)函數(shù)地址的傳遞,從而實(shí)現(xiàn)在被調(diào)用的函數(shù)中使用實(shí)參函數(shù)。例如:某程序中函數(shù)聲明為void subproc(int,int,int(*subfun)(int,int));函數(shù)調(diào)用為subproc(s,t,suba);subproc(s,t,subb);subproc(s,t,subc);其中int(*subfun)(int,int)表示subfun是指向函數(shù)的指針,它在程序中多次被調(diào)用,將函數(shù)suba,subb,subc作為實(shí)參分別傳遞給形參subfun。也就是將函數(shù)指針?lè)謩e指向suba,subb,subc三個(gè)子函數(shù)。實(shí)現(xiàn)了函數(shù)的多次調(diào)用,而無(wú)需定義多個(gè)實(shí)參,增加了程序的靈活性,簡(jiǎn)化了程序。

函數(shù)指針本質(zhì)是一個(gè)指針。

4.2 指針函數(shù)

指針函數(shù)本質(zhì)是一個(gè)函數(shù)。

一個(gè)函數(shù)可以返回一個(gè)整型值、字符值、實(shí)型值等,也可以返回指針型的數(shù)據(jù),即地址。例如:int *a(int x,int y);其中函數(shù)名和參數(shù)為a(int x,int y),在函數(shù)名前加上*表示此函數(shù)為指針型函數(shù)。最前面的int表示返回的指針指向整型變量。

5 指針數(shù)組與指向指針的指針

5.1 指針數(shù)組

一個(gè)數(shù)組,若其元素均為指針類型數(shù)據(jù),稱為指針數(shù)組。指針數(shù)組中的每一個(gè)元素均為指針。指針數(shù)組可以作為函數(shù)的參量使用,也常用于指向若干字符串,這樣使字符串處理更加靈活方便。

5.2 指向指針的指針

一個(gè)指針變量指向其他指針類型變量,稱為指向指針的指針。

例如:int i,*p1,**p2;p1=&i;p2=&p1;*p1=i;*p2=p1;則p2=&(&i);**p2=i;

一個(gè)指針變量的地址就是指向該變量的指針,也稱為雙重指針。例如:int **a [n]

這是一個(gè)int型指針的指針數(shù)組。a首先和[ ]結(jié)合,即a[n],表示a是一個(gè)數(shù)組,然后a[n]和其緊鄰的*結(jié)合,即*a[n],表示數(shù)組a的每個(gè)元素均為指針。*a[n]再和前一個(gè)*結(jié)合(*的結(jié)合順序?yàn)閺挠业阶螅?,?(*a[n]),表示數(shù)組a的每個(gè)元素為指針,且該指針指向int型的指針,也就是說(shuō),數(shù)組a的每個(gè)元素為int型的指針的指針。

[參考文獻(xiàn)]

[1]譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)(第三版)[M].清華大學(xué)出版社,2005.

[2]衛(wèi)武波,陳冬.C語(yǔ)言指針解析[J].《軟件導(dǎo)刊》,2012(11).

猜你喜歡
數(shù)組指針C語(yǔ)言
JAVA稀疏矩陣算法
基于Visual Studio Code的C語(yǔ)言程序設(shè)計(jì)實(shí)踐教學(xué)探索
JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
偷指針的人
基于C語(yǔ)言的計(jì)算機(jī)軟件編程
電子制作(2018年16期)2018-09-26 03:27:08
為什么表的指針都按照順時(shí)針?lè)较蜣D(zhuǎn)動(dòng)
高職高專院校C語(yǔ)言程序設(shè)計(jì)教學(xué)改革探索
尋找勾股數(shù)組的歷程
基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識(shí)別
論子函數(shù)在C語(yǔ)言數(shù)據(jù)格式輸出中的應(yīng)用
精河县| 丘北县| 陈巴尔虎旗| 甘洛县| 儋州市| 长海县| 白山市| 沅江市| 博野县| 巫溪县| 花莲市| 响水县| 辰溪县| 观塘区| 定陶县| 织金县| 黎城县| 嘉兴市| 万盛区| 景洪市| 四川省| 甘洛县| 清镇市| 贵定县| 达州市| 桂阳县| 固始县| 阿巴嘎旗| 运城市| 贵州省| 石城县| 拜城县| 休宁县| 布拖县| 临汾市| 忻城县| 锡林郭勒盟| 太和县| 五原县| 准格尔旗| 乐陵市|