999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺析C語言數(shù)組與指針

2016-05-12 21:39:18李紅英
科技資訊 2015年33期

李紅英

摘 要:數(shù)組和指針是C語言的兩個最重要的概念,它們若結合起來使用,非常靈活,初學者往往感到無所適從,筆者根據(jù)多年的經驗,利用典型實例和圖表對指向一維數(shù)組的指針的定義和數(shù)組元素的引用、指針與自增自減運算符相結合的一些常見表達式的具體含義及區(qū)別、二維數(shù)組中各數(shù)組元素的多種地址表示方式及訪問二維數(shù)組時如何定義指向數(shù)組元素的指針和指向某行數(shù)據(jù)的指針等進行了描述和分析,所有實例都在VC6.0環(huán)境下通過,希望初學者能快速理解和掌握。

關鍵詞:C語言 指針 數(shù)組 自增自減

中圖分類號:TP31 文獻標識碼:A 文章編號:1672-3791(2015)11(c)-0003-02

在C語言中數(shù)組表示一組數(shù)據(jù)類型都一樣的有序數(shù)據(jù)的集合,在內存中,它們占有連續(xù)的存儲單元,數(shù)組分一維數(shù)組和多維數(shù)組,一維數(shù)組是數(shù)組中最簡單的,比較容易理解,用一個數(shù)組名和一個下標就能唯一地確定一個元素。多維數(shù)組理解相對抽象些,以二維數(shù)組舉例,二維數(shù)組在內存中雖然是占一個連續(xù)的存儲單元,但是習慣上把它寫成矩陣的形式,更有助于理解其邏輯結構,二維數(shù)組每一行都可以看成一個一維數(shù)組。任何數(shù)組它們的數(shù)組名代表數(shù)組的首地址。而指針是C語言的另一個重要概念,指針代表地址,并且指針是可以移動的,對于數(shù)組和指針的使用,初學者往往感到無所適從,筆者根據(jù)多年經驗,利用等級考試中的典型實例來進行描述和分析,所有實例如都在VC6.0環(huán)境下通過,希望初學者能快速理解和掌握。

1 指向一維數(shù)組指針的定義及數(shù)組元素的引用

定義指向數(shù)組元素的指針變量的方法,與定義指向變量的指針變量相同,假設定義了一個一維數(shù)組int a[5]和一個指針變量int *p,如何讓指針變量指向數(shù)組呢?對于一維數(shù)組來說,只要讓指針變量指向它的數(shù)組元素就可以,因為數(shù)組名a代表數(shù)組的首地址,所以p=&a[0] 或p=a都表示指針指向數(shù)組的第一個元素,直接定義可以寫成int *p=a。而p+1表示指向下一個元素,p-1表示指向數(shù)組上一個元素,這樣,其后面第i個元素它的地址就可以表示成p+i,也可以表示成a+i。

若p指向a[0],而a[i]的地址可以用p+i或a+i表示,所以,引用數(shù)組元素的時候,既可以用普通的下標法如a[i]形式,也可以用指針法,這時*(p+i)和*(a+i)都可以表示a[i]元素。

例1: #include

void main( )

{ int a[6]={10,20,30,40,50,60},*p,i=3;

p=&a[1];

printf(“%d,%d\n”,a[i],p[i]);}

實例分析:此實例中,定義了一個指針指向a[1],i的值為3,輸出a[3]和p[3]的值,很多初學者以為p[i]的寫法是錯誤的,有的初學者則認為a[3]和p[3]等價,輸出結果是40,40,但實際上,在C語言中,指針變量可以帶下標,程序在編譯時,會把下標的處理轉換為地址的,p[i]處理成*(p+i),因為一開始的時候p指向a[1],那么p+i則表示往后數(shù)第三個元素,也就是a[4],故此程序輸p出結果為40,50。若一開始p=a,也就是說指針指向第一個元素,那么a[i]和p[i]的值就是相等的。

2 指針與自增自減運算符的結合

指針若與自增自減運算符結合起來使用,初學者最容易出錯,以自增運算符為例,若程序中出現(xiàn)*p++、*(p++)、*(++p)、++(*p)等算式,看起來差不多,很多初學者搞不懂它們之間的區(qū)別,殊不知“失之毫厘,謬以千里”,因為不懂它們的區(qū)別,分析程序時往往得到錯誤的結果。

首先,大家要知道“*”和“++”都是單目運算符,它們同一個優(yōu)先級,其結合方向是自右向左的,所以*p++和*(p++)等價,根據(jù)自增運算符的“名前先取”原則,要先取*p的值,再使p自增1,即指向下一個數(shù)組元素,*(++p)則是先使p指向下一個元素,再取*p的值,這幾個算式都是對所指的地址加1。 ++(*p)表示先取*p,再在這個值的基礎上加1,也就是對所指的元素的值加1。

例2: #include

void main( )

{ int a[5]={2,4,6,8,10},*p,**k;

p=a;k=&p;

printf(“%d ”,*(p++));

printf(“%d\n”,**k);}

實例分析:此實例中,自先定義了數(shù)組a,指針p和指向指針的指針k,通過p=a和k=&p語句,使指針p指向數(shù)組a的首地址,k指向指針p,接下來printf(“%d ”,*(p++))語句,是先輸出*p的值為2,再使指針往后指,再輸出**k的指也就是*p的值,此時,p指向4,輸出4,程序的輸出結果為“2 4”。

3 指向二維數(shù)組指針的定義及數(shù)組元素的引用

在使用指針指向二維數(shù)組時首先要了解多維數(shù)組元素的地址表示方式,假設有二維數(shù)組a[3][3],那么在邏輯上可以把這個二維數(shù)組看作是一個3行3列的表格,也可以看成是一個有3個元素的一維數(shù)組,該數(shù)組的每個元素也是一個一維數(shù)組,序號為0的行的首地址可以用a[0]、&a[0]或a表示,序號為1的行的首地址可表示為a[1]、&a[1]或a+1,如圖1所示。根據(jù)一維數(shù)組指針的定義,a[0]的值可以又表示成為*a,a[1]可以表示為*(a+1),a[i]即為*(a+i)。序號為0的行的首地址也就是元素a[0][0]的地址,即&a[0][0],它后面幾個元素的地址可以表示為a[0]+1,a[0]+2 ,若用指針法表示為*(a+0)、*(a+0)+1和*(a+0)+2,以此類推,第i行第j列元素的地址&a[i][j]可以表示成為a[i]+j,指針法表示為*(a+i)+j,也就是說&a[i][j]、a[i]+j、*(a+i)+j是等價的。這樣,對于一個二維數(shù)組來說,元素a[i][j]可用指針法表示為*(a[i]+j)或*(*(a+i)+j)。

指針變量指向二維數(shù)組中的元素,可以有兩種定義指針方法,一種是直接定義成指向數(shù)組元素的指針變量,如int *p,再讓p指向數(shù)組中某個具體元素;還有一種是定義成指向二維數(shù)組某一行的指針變量,假設一行有M個數(shù)據(jù),則可以定義成int (*p)[M]=a,這樣就可以讓指針指向第一行。

例3:#include

void main( )

{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

int (*p)[4]=a,i,j,k=0;

for(i=0;i<3;i++)

for(j=0;j<2;j++)

k=k+*(*(p+i)+j);

printf(“k=%d\n”,k);}

程序分析:此實例中,指針p指向二維數(shù)組a的首地址,然后執(zhí)行循環(huán),首先i=0,j=0,累加*(*(p+0)+0),即a[0][0],接著i=0,j=1,累加*(*(p+0)+1),即a[0][1],然后j=2時跳出內循環(huán),以此類推,執(zhí)行下一次外循環(huán)i=1時,累加a[1][0]和a[1][1],執(zhí)行外循環(huán)i=2時累加a[2][0]和a[2][1]……最后i=3時跳出整個循環(huán),由此看出,語句在這里其實就是累加二維數(shù)組第一列和第二列的元素。最后結果為1+3+9+11+17+19=60,輸出“k=60”。

總之,指針和數(shù)組結合起來使用非常靈活,同一地址有多種表示方法,而指針根據(jù)地址表示的不同可定義成指向數(shù)組元素的指針和指向某行數(shù)據(jù)的指針,初學者很難理解,大家一定要從C語言的數(shù)組和指針的概念出發(fā),仔細琢磨,反復思考,多比較,多應用, 如果能很好地應用指針訪問數(shù)組,對C語言后面的知識學習有很大幫助,如C語言的結構體、共用體、鏈表等,都是跟指針和數(shù)組相關的,正確靈活地運用指針,可以使程序更加簡潔、緊湊、高效。

參考文獻

[1] 譚浩強.C程序設計[M].4版.北京:清華大學出版社,2010.

[2] 未來教育.全國計算機等級考試模擬考場二級C[M].成都:電子科技大學出版社,2015.

[3] 教育部考試中心.全國計算機等級考試二級教程-C語言程序設計[M].北京:高等教育出版社,2002.

主站蜘蛛池模板: 五月婷婷亚洲综合| 日韩a在线观看免费观看| 免费在线a视频| 国产91精品最新在线播放| 一级毛片高清| 亚洲精品国产精品乱码不卞| 国产午夜福利片在线观看| 国产aⅴ无码专区亚洲av综合网| a级毛片免费网站| 国产精品永久不卡免费视频| 欧洲一区二区三区无码| 无码在线激情片| 伊人福利视频| 亚洲天堂视频网站| 国产日本一线在线观看免费| 欧美在线一二区| 色综合婷婷| 国产女人喷水视频| 久久人与动人物A级毛片| a级毛片在线免费| 亚洲国产理论片在线播放| 中文字幕人妻无码系列第三区| 99久久精品免费看国产免费软件 | 天天躁夜夜躁狠狠躁图片| 91外围女在线观看| 99久久精品国产自免费| igao国产精品| 国产日韩精品欧美一区灰| 无码AV日韩一二三区| 国产91精品久久| 99re这里只有国产中文精品国产精品| 国产成人做受免费视频| 亚洲无限乱码| 久久99国产视频| 久久久波多野结衣av一区二区| 国产网友愉拍精品视频| 亚洲欧美在线综合一区二区三区| 国产91丝袜在线播放动漫 | 国产精品成人一区二区不卡| 亚洲永久色| 91精品免费高清在线| 亚洲国产欧美自拍| 欧美成人怡春院在线激情| 亚洲色欲色欲www在线观看| 亚洲国产中文精品va在线播放| 在线看片免费人成视久网下载| 亚洲性影院| 久久国产免费观看| 一区二区自拍| 91精品啪在线观看国产91| 国产精品视频猛进猛出| 色久综合在线| 亚洲天堂自拍| 久草视频精品| 国产在线观看成人91| 日本尹人综合香蕉在线观看| 国产精品男人的天堂| 97se亚洲综合在线韩国专区福利| 日韩欧美中文| 日日碰狠狠添天天爽| 美女扒开下面流白浆在线试听| 91久久国产热精品免费| 色婷婷国产精品视频| 亚洲天堂视频在线免费观看| 成年免费在线观看| 国产一二视频| 日韩不卡高清视频| 日本免费新一区视频| 亚洲成AV人手机在线观看网站| 成人一区专区在线观看| 久久亚洲国产一区二区| 99ri精品视频在线观看播放| 国产91视频免费观看| 三区在线视频| 国产网友愉拍精品视频| 亚洲国产天堂久久综合| 亚洲第一色网站| 露脸国产精品自产在线播| 亚洲天堂成人在线观看| 蝌蚪国产精品视频第一页| 亚洲三级片在线看| 四虎永久免费网站|