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

?

C語言指針應(yīng)用

2014-06-27 08:47:30盧瑩瑩
考試周刊 2014年24期
關(guān)鍵詞:數(shù)組指針C語言

盧瑩瑩

摘 要: “指針”是C語言的精髓,是C語言區(qū)獨(dú)有的功能,在C語言的程序設(shè)計(jì)過程中起著不可或缺的作用。只有學(xué)好了指針才算掌握了C語言,同時(shí)指針也是C語言最危險(xiǎn)的特性,如果使用不當(dāng),則很容易指到意想不到的地方,產(chǎn)生錯(cuò)誤很難發(fā)現(xiàn)。應(yīng)該特別注意指針教學(xué),高效應(yīng)用指針,發(fā)揮C語言的優(yōu)勢(shì)。

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

“指針”是C語言中廣泛使用的一種數(shù)據(jù)類型,運(yùn)用指針編程是C語言最主要的風(fēng)格之一。利用指針可以表示各種數(shù)據(jù)結(jié)構(gòu),它與函數(shù)、數(shù)組的使用和傳遞數(shù)據(jù)有密切聯(lián)系,能方便地訪問數(shù)組,還能像匯編語言一樣處理內(nèi)存地址,從而編出精致而高效的程序。指針極大地強(qiáng)化了C語言的功能。學(xué)習(xí)指針是學(xué)習(xí)C語言最重要的一環(huán),能否正確理解和使用指針是判斷是否掌握了C語言的重要標(biāo)志。但是指針也是C語言最危險(xiǎn)的特性,如果使用不當(dāng),則很容易指到意想不到的地方,產(chǎn)生錯(cuò)誤也很難發(fā)現(xiàn)。因此,對(duì)于初學(xué)者來說,應(yīng)特別注意指針的應(yīng)用。怎樣才能應(yīng)用好指針呢?下面筆者以在計(jì)算機(jī)C語言教學(xué)中的體會(huì)與大家進(jìn)行探討。

一、理解指針

在C語言中任何數(shù)據(jù)只要定義了,在內(nèi)存中就是有一定的存儲(chǔ)單元的。存儲(chǔ)單元就是變量在計(jì)算機(jī)中的存儲(chǔ)地址,指針就是用來表示這些地址的變量。所以簡單地說,指針就是地址,變量的指針就是變量的地址,這里還涉及一個(gè)概念就是指針變量,所謂指針變量就是用來存放指針(地址)的變量。例如:int a;假設(shè)a的地址是2000,而2000又存儲(chǔ)在變量point中,那么變量point就是指針的變量簡稱指針變量,a就是指針變量所指向的變量。很多初學(xué)者都存在這樣的誤區(qū):既然指針放的是地址,而2000正好是變量a的地址,那么對(duì)于指針point就可以這樣賦值:point=2000,這是錯(cuò)誤的,這里的2000表示的不是地址是一個(gè)整型數(shù)據(jù)。所以對(duì)于指針變量的賦值只能用取地址運(yùn)算符“&”進(jìn)行賦值即:point=&a;&a即為a的地址。

二、指針與函數(shù)

指針作為C語言的精華有很多用途,除具有一般的功能外,其中具體特殊功能的應(yīng)用總結(jié)起來有三個(gè)方面:一是用于在函數(shù)中可以返回多個(gè)值;二是可以實(shí)現(xiàn)動(dòng)態(tài)調(diào)用函數(shù);三是實(shí)現(xiàn)數(shù)組的動(dòng)態(tài)定義。其中,普通變量作為函數(shù)的參數(shù),傳遞的是變量的值,因此只能帶回一個(gè)返回值,但在有些場合需要返回多個(gè)值,這就必須用到指針做函數(shù)的參數(shù),因?yàn)橹羔樧鳛閰?shù)傳遞的是地址,讓實(shí)參和形參指向同一個(gè)變量的地址,N個(gè)形參所指向的變量的值改變了,N個(gè)實(shí)參的值也自然改變了,從而實(shí)現(xiàn)了帶回多個(gè)返回值。這里舉個(gè)例子,編寫一個(gè)函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)從小到大輸出。這個(gè)程序需要子函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)的交換,把交換后的兩個(gè)值通過指針傳回主函數(shù)輸出,傳回來的是兩個(gè)值。所以普通變量做函數(shù)的參數(shù)是無法實(shí)現(xiàn)的,只能用指針作為函數(shù)的參數(shù)。具體實(shí)現(xiàn):

子函數(shù)實(shí)現(xiàn)交換:

swap(p1,p2)

int *p1,*p2;

{int p;

p=*p1;

*p1=*p2;

*p2=p;

}

主程序?qū)崿F(xiàn)調(diào)用,輸出:

main()

{int a,b;

int *pointer_1,*pointer_2;

scanf(“%d,%d”,&a,&b);

point_ 1=&a;

point_2=&b;

if(a

swap(point_1,point_2);

printf(“%d,%d”,a,b);

}

由此可見,要通過函數(shù)調(diào)用得到N個(gè)返回值可以通過以下三步實(shí)現(xiàn):(1)主調(diào)函數(shù)中設(shè)N個(gè)變量,用N個(gè)指針指向他們;(2)將指針變量作實(shí)參,將N個(gè)變量的地址傳給形參;(3)通過形參指針變量指向的改變,改變N個(gè)變量的值。最后主調(diào)函數(shù)中就可以得到N個(gè)變量的返回值。

三、指針與數(shù)組

前面提到任何數(shù)據(jù)都有存儲(chǔ)單元,都有指針。所以,從這個(gè)角度出發(fā)可以將指針分為:指向變量的指針、數(shù)組指針、字符指針、指向指針的指針、函數(shù)指針、結(jié)構(gòu)變量的指針及文件指針,等等。其中,指向變量的指針就是存儲(chǔ)變量的地址的,這是指針最簡單的一種類型。那么一個(gè)變量有地址,一個(gè)數(shù)組有若干個(gè)元素,每個(gè)元素都有一個(gè)地址,所謂數(shù)組的指針,就是指數(shù)組的名稱,實(shí)際上是指向整個(gè)數(shù)組空間的起始地址。數(shù)組元素的指針是數(shù)組元素的地址。例如:int a[10];int*p;這里的數(shù)組名a就是數(shù)組的首地址,本質(zhì)上是一個(gè)指針。a[2]表示距離a指向空間向后2個(gè)位置所在空間中的存放的值,所以a[2]=*(a+2)。那么如果讓p=a,p就是指向數(shù)組的指針,對(duì)于a我們可以做加減整數(shù)運(yùn)算,利用它表示數(shù)組中任何數(shù)據(jù)的值。那么對(duì)于指針也可以通過加減整數(shù)運(yùn)算來表示數(shù)組中的任何數(shù)據(jù)。指針變量加上或減區(qū)一個(gè)整數(shù)n表示把指針指向的當(dāng)前位置向前或向后移動(dòng)n個(gè)位置。具體移動(dòng)的字節(jié)數(shù)和指針數(shù)組的類型在內(nèi)存所占的字節(jié)數(shù)有關(guān)系,如果指針數(shù)組類型為整型,在內(nèi)存中占2個(gè)字節(jié),那么,指針p+1,實(shí)際上的地址值就是原址加2,對(duì)于數(shù)組元素來說就是指針向后移動(dòng)一個(gè)元素。如int a[10],*p,*s;p=a;s=p+2;其中s的值表示數(shù)組中首地址向后移動(dòng)2個(gè)數(shù)組元素的位置,表示a[2]對(duì)應(yīng)的地址,而具體移動(dòng)的字節(jié)數(shù)則為4個(gè)字節(jié)。為了表示兩個(gè)地址間存在的距離,可以通過指針間的減法實(shí)現(xiàn)。指針之間是不能有加法操作的,指針的加減運(yùn)算只能對(duì)數(shù)組指針變量進(jìn)行,對(duì)指向其他類型的變量的指針變量做加減運(yùn)算是毫無意義的。而且兩個(gè)指針變量之間的運(yùn)算只有指向同一數(shù)組時(shí)它們之間才能進(jìn)行運(yùn)算,否則運(yùn)算將失去意義。

四、結(jié)語

C語言是到目前為止學(xué)習(xí)最多的程序設(shè)計(jì)語言之一,也是國外大學(xué)計(jì)算機(jī)專業(yè)唯一的必修課程。在整個(gè)C語言教學(xué)中,指針是一個(gè)十分重要的部分,也是最難掌握的部分之一。本文從對(duì)指針概念的理解、指針在函數(shù)和數(shù)組的使用等方面系統(tǒng)論述了指針,目的是讓大家清晰地了解指針、掌握指針,從而高效地應(yīng)用指針。只有掌握好指針,才能充分發(fā)揮C語言的優(yōu)勢(shì)。

參考文獻(xiàn):

[1]譚浩強(qiáng).C程序設(shè)計(jì)教程.北京:清華大學(xué)出版社,2008,11.

[2]陳剛.C語言程序設(shè)計(jì).清華大學(xué)出版社,2010,2.

[3]魏海新,李燕.C語言程序設(shè)計(jì)實(shí)用教程.機(jī)械工業(yè)出版社,2007,7.

[4]路俊維,馬雪松.C語言程序設(shè)計(jì).中國鐵道工業(yè)出版社,2009,6.

猜你喜歡
數(shù)組指針C語言
JAVA稀疏矩陣算法
基于Visual Studio Code的C語言程序設(shè)計(jì)實(shí)踐教學(xué)探索
JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
偷指針的人
基于C語言的計(jì)算機(jī)軟件編程
電子制作(2018年16期)2018-09-26 03:27:08
為什么表的指針都按照順時(shí)針方向轉(zhuǎn)動(dòng)
高職高專院校C語言程序設(shè)計(jì)教學(xué)改革探索
尋找勾股數(shù)組的歷程
基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識(shí)別
論子函數(shù)在C語言數(shù)據(jù)格式輸出中的應(yīng)用
山西省| 镇坪县| 新巴尔虎右旗| 犍为县| 浦东新区| 庆城县| 郑州市| 永年县| 东兰县| 都兰县| 新昌县| 年辖:市辖区| 百色市| 顺义区| 嫩江县| 江都市| 五常市| 铁力市| 万荣县| 浮山县| 北辰区| 宽甸| 荣昌县| 江陵县| 句容市| 隆德县| 信丰县| 夏河县| 宁明县| 翁牛特旗| 乌拉特后旗| 迁西县| 宁陵县| 阿拉尔市| 嵩明县| 辽宁省| 建阳市| 玉环县| 昌平区| 维西| 榆林市|