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
主站蜘蛛池模板: 国产成人无码AV在线播放动漫| 91精品视频在线播放| 男女猛烈无遮挡午夜视频| 久久黄色视频影| 久久国产拍爱| 玖玖精品视频在线观看| 欧美国产综合视频| 精品视频91| 精品91在线| 2022国产无码在线| 国产尹人香蕉综合在线电影 | 欧美综合激情| 久久精品中文无码资源站| 国产69囗曝护士吞精在线视频| 国内精品视频区在线2021| 伦伦影院精品一区| 日本午夜视频在线观看| 国产精品99久久久久久董美香| 99精品国产高清一区二区| 国产精品美女自慰喷水| 亚洲第一成年网| 美女扒开下面流白浆在线试听| 亚洲专区一区二区在线观看| 午夜欧美理论2019理论| 久久中文字幕不卡一二区| 国产99欧美精品久久精品久久| 欧美日本二区| 免费黄色国产视频| 88av在线| 亚洲91精品视频| 九色91在线视频| 国产成人做受免费视频| 国产精品亚洲片在线va| 久操线在视频在线观看| 青青草国产免费国产| 国产69精品久久久久孕妇大杂乱| 亚洲区第一页| 国产真实自在自线免费精品| 久久一级电影| 国产精品丝袜在线| 九色免费视频| 欧美日韩中文字幕在线| 九九九久久国产精品| 青青青亚洲精品国产| 日本免费a视频| 亚洲首页国产精品丝袜| 青青草原偷拍视频| 黄色成年视频| 丝袜亚洲综合| 狠狠色噜噜狠狠狠狠奇米777 | 国产chinese男男gay视频网| 凹凸精品免费精品视频| 国产另类乱子伦精品免费女| 色悠久久综合| 亚洲人成网站色7799在线播放| 久久综合丝袜长腿丝袜| 狠狠v日韩v欧美v| 精品成人一区二区| 久99久热只有精品国产15| 日韩AV手机在线观看蜜芽| 日本不卡在线| 狠狠躁天天躁夜夜躁婷婷| 成人午夜天| 亚洲国产成熟视频在线多多 | 国产激情无码一区二区免费| 四虎永久在线精品国产免费 | 爆操波多野结衣| 在线播放精品一区二区啪视频| 在线精品亚洲一区二区古装| 成人福利在线视频免费观看| 午夜欧美在线| 国产丝袜无码精品| 亚洲成人精品久久| 亚洲欧洲免费视频| 一本大道无码高清| 日韩av高清无码一区二区三区| 亚洲乱码视频| 亚洲乱码在线播放| 欧美日本在线播放| 九九热视频精品在线| 无码电影在线观看| 日韩精品中文字幕一区三区|