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

談C語言中指針、地址和數組的相互關系

2009-03-02 09:33:14劉林香許燕青江忠君
新媒體研究 2009年2期
關鍵詞:定義

劉林香 許燕青 江忠君

[摘要]在學習C語言過程中,指針、地址和數組是最富有特色的內容,特別是指針、地址和數組之間相互關系更具有特色。掌握它們之間的相互關系將有助于C語言其他內容的學習,因此學好這部分內容是掌握C語言的關鍵。主要用圖示法闡述指針和地址、指針和數組之間的聯系。

[關鍵詞]C語言 指針 地址 數組 圖示法

中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)0120049-01

指針是C語言中一個最重要概念之一,指針變量是用來存放另外一個變量地址,通過指針變量可以間接引用另外一個變量的內容。數組是由若干個元素按一定順序關系組合而成的集合體,即數組中的每一個元素都屬于同一個數據類型,數組名則是數組元素的首地址,用戶在編程中用一個數組名和下標來唯一確定數組中的每一個元素。所以,指針、地址和數組以及它們之間的相互關系構成C語言最有特色部分。

一、指針和地址

(一)指針變量的定義

在程序中定義了一個變量,那么在計算機內不僅定義了該變量的類型、名稱,而且還在內存中分配了一塊存儲區域,這塊存儲區域的首地址稱為該變量的指針。變量的值就存放在這塊區域之中,在計算機內部,通過訪問或修改這塊區域的內容來訪問或修改相應的變量。Turbo C語言中,對于變量的訪問形式之一,就是先求出變量的地址,然后再通過地址對它進行訪問。

指針變量的一般定義為:

類型標識符*標識符;

其中“標識符”是指針變量的名字,標識符前加了“*”號,表示該變量是指針變量,而最前面的“類型標識符”表示該指針變量所指向的變量的類型。一個指針變量只能指向同一種類型的變量,也就是說,我們不能定義一個指針變量,既能指向一整型變量又能指向雙精度變量。如定義了一個指針變量int*ip;說明該指針變量ip為指向整數的指針,用它存放整型變量的地址。

(二)指針變量的引用

指針變量中只能存放地址,因此,在使用中不能將一個整數賦給一指針變量。如:

int *ip;ip=80;這種賦值是錯誤的。可以這樣定義:

int i=100,x;int *ip;

定義了兩個整型變量i,x,還定義了一個指向整數的指針變量ip。i,x中可存放整數,而ip中只能存放整型變量的地址。通過地址運算“&”可以把i的地址賦給ip:

ip=&i

此時指針變量ip就指向整型變量i,假設變量i的地址為1600,這個賦值可理解為圖1所示的聯系。

可以通過指針變量ip間接訪問變量i,如:

x=*ip;

運算符*訪問以ip為地址的存儲區域,而ip中存放的是變量i的地址,因此,*ip訪問的是地址為1600的存儲區域,它就是i所占用的存儲區域,所以上面的賦值表達式等價于

x=i;

另外,指針變量和一般變量一樣,存放在它們之中的值是可以改變的,也就是說可以改變它們的指向,假設

Int i,j,*p1,*p2;

i=10 ;

j=20 ;

p1=&i

p2=&j

通過圖示法闡述如下:

如圖2所示,采用圖示法展示出普通變量i、j和指針變量p1、p2之間的關系,指針其實是內存地址,而內存中的單元是按字節編址(每個地址編碼對應一個字節空間),從圖中可以看出整型變量i和j分別占用兩個字節的內存空間。同時也可以看出每個指針變量也是占用兩個字節的空間,因為每個指針變量都是存儲一個地址碼。

通過指針訪問它所指向變量的值是以間接訪問的形式進行的,所以比直接訪問一個變量要多費時間,而且不直觀,因為通過指針要訪問哪一個變量,取決于指針的值(即指向),例如“*p2=*p1;”實際上就是“j=i;”,前者不僅速度慢而且目的不明。但由于指針是變量,可以通過改變它們的指向,以間接訪問不同的變量的值,這給程序員帶來靈活性,也使程序代碼編寫得更為簡潔、高效。

二、指針和數組

指針和數組有著密切的關系,任何能由數組下標完成的操作也都可用指針來實現,而且使用指針處理數據,有助于產生占用空間小,運行速度快且高質量的目標代碼。

(一)指向數組元素的指針

在C語言中,數組的指針就是數組的起始地址(也就第一個元素的地址),如:

int a[10],*p;

對于數組a[i]表示數組a的第i+1個變量,a是數組名表示該數組的首地址,為常量,即a與&a[0]等價,而p=a則將數組a的首地址&a[0]賦給指針變量p。通過p來訪問數組元素時要注意以下問題:

1.P,a與&a[0]它們是等價的,都表示數組a的首地址。

2.p[i]和a[i]都是代表該數組的第i+1個元素。

3.p+i和a+i代表了第i+1個元素的地址,所以我們也可以使用*(p+i)和*(a+i)來引用對象元素。

4.表達式p+1為指向p的下一個存儲單元,即a[0]下一個元素a[1]的存儲單元,也就是p+1等價于&a[1]。

(二)指向二維數組的指針

為了說明問題,假設有如下程序段:

int a[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}},i,j,*p;

P=&a[0][0];

A為二維數組名,此數組有3行5列,共15個元素。也可這樣來理解,數組a由三個元素組成:a[0],a[1],a[2]。而每個元素又是一個一維數組,且都含有5個元素(相當于5列),例如,a[0]所代表的一維數組所包含的5個元素為a[0][0],a[0][1],a[0][2],a[0][3],a[0][4]。數組名a也代表二維數組的首地址,也可看成是二維數組第0行的首地址。a+1就代表第1行的首地址,a+2就代表第2行的首地址。如果此二維數組的首地址為1000,由于第0行有5個整型元素,所以a+1為1010,a+2也就為1020,如圖3所示。

把a[0],a[1],a[2]看成是一維數組名,可以認為它們分別代表它們所對應的數組的首地址,也就是講,a[0]代表第0行中第0列元素的地址,即&a[0][0],a[1]是第1行中第0列元素的地址,即&a[1][0],根據地址運算規則,a[0]+1即代表第0行第1列元素的地址,即&a[0][1],a[i]+j即代表第i行第j列元素的地址,即&a[i][j]。將指針p指向二維數組a的首地址,p+1就指向下一個元素,由于每行5個元素,p+i*5+j就是第i行第j列元素的地址。

參考文獻:

[1]譚浩強,C程序設計(第二版),北京:清華大學出版社,1999.

[2]嚴桂蘭,C語言程序設計與應用教程,福建:廈門大學出版社,2001.

猜你喜歡
定義
以愛之名,定義成長
活用定義巧解統計概率解答題
例談橢圓的定義及其應用
題在書外 根在書中——圓錐曲線第三定義在教材和高考中的滲透
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
嚴昊:不定義終點 一直在路上
華人時刊(2020年13期)2020-09-25 08:21:32
定義“風格”
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
有壹手——重新定義快修連鎖
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
主站蜘蛛池模板: 人妻精品久久无码区| 国产精品人莉莉成在线播放| 日本黄色a视频| 幺女国产一级毛片| 午夜色综合| 久操中文在线| av天堂最新版在线| 全裸无码专区| 国产成人高清在线精品| 亚洲无码日韩一区| 日韩免费无码人妻系列| 蜜臀AVWWW国产天堂| 国产成人永久免费视频| 91精品国产综合久久不国产大片| 色网站在线免费观看| 免费一级毛片在线观看| 国产在线观看精品| 3344在线观看无码| 97在线碰| 免费一级毛片不卡在线播放| 亚洲国产综合精品中文第一| 91网址在线播放| 色婷婷狠狠干| 国产福利大秀91| 国产精品页| 国产人成乱码视频免费观看| 一本无码在线观看| 欧美三级日韩三级| 第九色区aⅴ天堂久久香| 四虎在线观看视频高清无码| 波多野结衣无码AV在线| 久久久久久国产精品mv| 欧美另类图片视频无弹跳第一页| 97色婷婷成人综合在线观看| 无码福利视频| 国产乱人伦精品一区二区| 老色鬼久久亚洲AV综合| 婷婷伊人五月| 国产亚洲成AⅤ人片在线观看| 伊人色综合久久天天| 日本午夜影院| 99久视频| 亚洲天堂精品在线观看| 国产无码制服丝袜| 亚洲男人的天堂久久香蕉 | 亚洲免费黄色网| 国产精品免费福利久久播放 | 色婷婷狠狠干| 玖玖免费视频在线观看| 国产美女一级毛片| 国产av一码二码三码无码| 日本www色视频| 色欲色欲久久综合网| 香蕉综合在线视频91| 狠狠色综合久久狠狠色综合| 国内a级毛片| 高清久久精品亚洲日韩Av| 尤物国产在线| 免费在线不卡视频| 日韩小视频在线播放| 国产成人高清亚洲一区久久| 九九热视频在线免费观看| 亚洲综合色在线| 婷五月综合| 国产美女无遮挡免费视频| 亚洲 欧美 中文 AⅤ在线视频| 免费看美女毛片| 国产第三区| 五月天久久综合国产一区二区| 国产亚洲欧美在线中文bt天堂| 久久综合结合久久狠狠狠97色| 欧洲极品无码一区二区三区| 四虎永久在线精品影院| 亚洲不卡无码av中文字幕| 国产特一级毛片| 欧洲一区二区三区无码| 欧美激情综合一区二区| 91色国产在线| 青青草国产精品久久久久| 久久99热66这里只有精品一| 亚洲av片在线免费观看| 亚洲中文字幕在线精品一区|