在這一章中將介紹C語言程序的指針_第1頁
在這一章中將介紹C語言程序的指針_第2頁
在這一章中將介紹C語言程序的指針_第3頁
在這一章中將介紹C語言程序的指針_第4頁
在這一章中將介紹C語言程序的指針_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第7 7章章 指針指針 在這一章中將介紹在這一章中將介紹C語言程序的指針,指語言程序的指針,指針是一內存中的地址,任何一個變量在內存中針是一內存中的地址,任何一個變量在內存中都有一個空間,這個空間有一個地址,這個地都有一個空間,這個空間有一個地址,這個地址就是變量的指針,通過指針可以實現(xiàn)對內存址就是變量的指針,通過指針可以實現(xiàn)對內存的直接訪問。的直接訪問。7.1 指針概述指針概述7.2 指針與函數(shù)參數(shù)指針與函數(shù)參數(shù)7.3 指針與數(shù)組指針與數(shù)組7.4 數(shù)組與函數(shù)參數(shù)數(shù)組與函數(shù)參數(shù)7.5 字符串與指針字符串與指針7.6 指針與二維數(shù)組指針與二維數(shù)組7.7 動態(tài)數(shù)組動態(tài)數(shù)組7.1 指針概述指針概述

2、 在計算機中,所有的數(shù)據(jù)都是存放在存儲在計算機中,所有的數(shù)據(jù)都是存放在存儲器中的,不同的數(shù)據(jù)類型所占用的內存單元數(shù)器中的,不同的數(shù)據(jù)類型所占用的內存單元數(shù)不等,如不等,如int整型量占整型量占4個字節(jié),字符量占個字節(jié),字符量占1個字個字節(jié)。為了正確地訪問這些內存單元,節(jié)。為了正確地訪問這些內存單元, 必須為每必須為每個內存單元編上號,根據(jù)一個內存單元的編號個內存單元編上號,根據(jù)一個內存單元的編號即可準確地找到該內存單元。內存單元的編號即可準確地找到該內存單元。內存單元的編號也叫做地址。也叫做地址。 既然根據(jù)內存單元的編號或地址既然根據(jù)內存單元的編號或地址就可以找到所需的內存單元,所以通常也把這

3、就可以找到所需的內存單元,所以通常也把這個地址稱為指針。個地址稱為指針。 1 指針變量指針變量 系統(tǒng)的指針地址可以用一個變量來存儲,這系統(tǒng)的指針地址可以用一個變量來存儲,這個變量就是指針變量。指針變量的定義規(guī)則是:個變量就是指針變量。指針變量的定義規(guī)則是: 數(shù)據(jù)類型數(shù)據(jù)類型 * 變量名稱;變量名稱; 指針變量的定義與普通變量十分相似,只是在其指針變量的定義與普通變量十分相似,只是在其中插入了一個中插入了一個“*”號,例如:號,例如: int *p; p是指針變量,可以用來存儲一個整數(shù)變量的地址,是指針變量,可以用來存儲一個整數(shù)變量的地址,或稱它指向一個整數(shù)變量。或稱它指向一個整數(shù)變量。嚴格地說

4、,一個指針嚴格地說,一個指針是一個地址,是一個常量。而一個指針變量卻可是一個地址,是一個常量。而一個指針變量卻可以被賦予不同的指針值,是變量,但通常把指針以被賦予不同的指針值,是變量,但通常把指針變量簡稱為指針。變量簡稱為指針。 2 指針變量的賦值指針變量的賦值 指針變量是一個可以存儲指針值的變量,在指針變量是一個可以存儲指針值的變量,在32位系統(tǒng)中它占位系統(tǒng)中它占4個字節(jié),可以把一個變量用個字節(jié),可以把一個變量用&取地址后賦值給這個指針變量,例如:取地址后賦值給這個指針變量,例如: int a=1,*p; p=&a; 此時此時p存儲了變量存儲了變量a的地址。注意變量的地址。注

5、意變量p本身本身也是一個變量,它自己也有一個存儲單元,這個也是一個變量,它自己也有一個存儲單元,這個存儲單元顯然與變量存儲單元顯然與變量a的存儲單元是不同的,變的存儲單元是不同的,變量量a的存儲單元存儲的是變量的存儲單元存儲的是變量a的值,而變量的值,而變量p存存儲單元存儲的是變量儲單元存儲的是變量a單元的地址,如圖單元的地址,如圖7-3所示。所示。 圖7-3 變量指針與指針變量 指針變量是有類型的,例如:指針變量是有類型的,例如: int *p; char *q; 則則p是一個指向整數(shù)變量的指針變量,是一個指向整數(shù)變量的指針變量,q是一個是一個指向字符變量的指針變量,在對它們賦值時要指向字符

6、變量的指針變量,在對它們賦值時要注意類型匹配,例如:注意類型匹配,例如: int *p,a; char *q,c; p=&a; / 正確正確 q=&c; / 正確正確 p=&c; / 錯誤錯誤 q=&a; / 錯誤錯誤 一般要保證變量類型與指針類型一致,不一般要保證變量類型與指針類型一致,不能把一種類型的變量的指針賦值給另外一種不能把一種類型的變量的指針賦值給另外一種不同類型的指針變量。但是由于指針畢竟是一個同類型的指針變量。但是由于指針畢竟是一個內存地址,從物理上來說,內存地址,從物理上來說,p與與q都是內存地址,都是內存地址,在在32位系統(tǒng)中都是位系統(tǒng)中都是

7、32位二進制地址值,沒有什位二進制地址值,沒有什么本質區(qū)別,因此經(jīng)過轉化后還是可以交叉賦么本質區(qū)別,因此經(jīng)過轉化后還是可以交叉賦值的,通過指針的類型轉換可以實現(xiàn)下列賦值:值的,通過指針的類型轉換可以實現(xiàn)下列賦值: p=(int*)&c; / &c是是char *指針,指針,(int*)轉化后成為轉化后成為int *類型指針類型指針 q=(char*)&a; / &a是是int *指針,指針,(char*)轉化后成為轉化后成為char *類型指針類型指針 一般指針變量類型的轉換可以通過下面方式完成:一般指針變量類型的轉換可以通過下面方式完成: (數(shù)據(jù)類型數(shù)據(jù)類型

8、*)指針指針 另外數(shù)組變量也可以取指針,例如:另外數(shù)組變量也可以取指針,例如: int a5,*p; p=&a0; / p指向指向a0變量變量 p=&a4; / p指向指向a4變量變量 關于數(shù)組與指針的關系在后面章節(jié)中再進一步講解。關于數(shù)組與指針的關系在后面章節(jié)中再進一步講解。 3通過指針訪問變量通過指針訪問變量 既然指針變量指向一個變量,因此通過指既然指針變量指向一個變量,因此通過指針變量也就知道變量的位置,知道位置也就能針變量也就知道變量的位置,知道位置也就能訪問到變量,可以通過指針變量存取變量的值。訪問到變量,可以通過指針變量存取變量的值。 C中規(guī)定通過:中規(guī)定通過: *

9、指針變量指針變量 來訪問對應變量的值,例如:來訪問對應變量的值,例如: int a=1,b,*p; p=&a; *p=2; / 設置設置p指向的變量的值為指向的變量的值為2,既,既a=2 b=*p; / 把把p指向的變量的值賦予指向的變量的值賦予b,既,既b=2 在在C語言中,系統(tǒng)對語言中,系統(tǒng)對“*指針變量指針變量”的解釋是的解釋是根據(jù)指針變量的類型計算出對應變量所占字節(jié)數(shù),根據(jù)指針變量的類型計算出對應變量所占字節(jié)數(shù),之后把指針變量所指的連續(xù)的幾個字節(jié)的二進制之后把指針變量所指的連續(xù)的幾個字節(jié)的二進制數(shù)據(jù)看成是與指針變量同類型的數(shù)據(jù)并存取這一數(shù)據(jù)看成是與指針變量同類型的數(shù)據(jù)并存取這一

10、數(shù)據(jù)。數(shù)據(jù)。7.2 指針與函數(shù)參數(shù)指針與函數(shù)參數(shù) 指針變量與普通變量一樣也可以作為函數(shù)指針變量與普通變量一樣也可以作為函數(shù)參數(shù)來傳遞,實際參數(shù)是一個變量的指針,該參數(shù)來傳遞,實際參數(shù)是一個變量的指針,該變量的指針傳遞到函數(shù)的形式參數(shù)指針變量,變量的指針傳遞到函數(shù)的形式參數(shù)指針變量,這樣形式參數(shù)的指針變量仍然指向實際參數(shù),這樣形式參數(shù)的指針變量仍然指向實際參數(shù),換句話說就是在函數(shù)中可以訪問主函數(shù)的實際換句話說就是在函數(shù)中可以訪問主函數(shù)的實際參數(shù)。參數(shù)。 但要注意函數(shù)如返回一個指針,則這個指但要注意函數(shù)如返回一個指針,則這個指針指向的變量必須有效,不能返回一個函數(shù)局針指向的變量必須有效,不能返回一

11、個函數(shù)局部變量的指針,這個指針是無意義的,因為函部變量的指針,這個指針是無意義的,因為函數(shù)的局部變量在函數(shù)退出時已經(jīng)銷毀了。數(shù)的局部變量在函數(shù)退出時已經(jīng)銷毀了。 在前面章節(jié)中曾經(jīng)介紹過當變量作為函數(shù)在前面章節(jié)中曾經(jīng)介紹過當變量作為函數(shù)參數(shù)時,它是函數(shù)的一個局部變量,它在函數(shù)參數(shù)時,它是函數(shù)的一個局部變量,它在函數(shù)內的改變不會影響到主函數(shù)的對應實參數(shù)變量。內的改變不會影響到主函數(shù)的對應實參數(shù)變量。但如把指針變量作為函數(shù)參數(shù)來傳遞情況有不但如把指針變量作為函數(shù)參數(shù)來傳遞情況有不同,通過該指針變量去改變對應變量的值會影同,通過該指針變量去改變對應變量的值會影響到主函數(shù)對應的變量。響到主函數(shù)對應的變量

12、。例例7_5:值傳遞與地址傳遞規(guī)則。:值傳遞與地址傳遞規(guī)則。#include void fun(int *p,int b) printf(fun中中: p=%p *p=%d &b=%p b=%dn,p,*p,&b,b); *p=100; b=100;void main() int a=1,b=2,*p; p=&a; printf(調用前調用前: p=%p a=%d &b=%p b=%dn,p,a,&b,b); fun(p,b); printf(調用前調用前: p=%p a=%d &b=%p b=%dn,p,a,&b,b); C語言中把函數(shù)

13、參數(shù)是指針變量的傳遞方語言中把函數(shù)參數(shù)是指針變量的傳遞方法稱為地址傳遞,它傳遞的是變量的地址,因法稱為地址傳遞,它傳遞的是變量的地址,因此在函數(shù)中用此地址改變對應變量的值時,實此在函數(shù)中用此地址改變對應變量的值時,實際上改變的是主函數(shù)中的變量的值。而把函數(shù)際上改變的是主函數(shù)中的變量的值。而把函數(shù)參數(shù)是普通變量的傳遞稱為值傳遞,它傳遞的參數(shù)是普通變量的傳遞稱為值傳遞,它傳遞的是實際參數(shù)的值,而且它是函數(shù)的局部變量,是實際參數(shù)的值,而且它是函數(shù)的局部變量,因此它的值在函數(shù)中改變時不會影響到主函數(shù)因此它的值在函數(shù)中改變時不會影響到主函數(shù)中實際參數(shù)的值。中實際參數(shù)的值。7.3 指針與數(shù)組指針與數(shù)組 i

14、nt a5; 則則a0、a1、a2、a3、a4都是整數(shù)變量,都是整數(shù)變量,既然是變量它們在內存中有對應的存儲空間,既然是變量它們在內存中有對應的存儲空間,也就可以取出其指針地址,而且這些地址是連也就可以取出其指針地址,而且這些地址是連續(xù)的,因為數(shù)組單元是連續(xù)的。續(xù)的,因為數(shù)組單元是連續(xù)的。 既然數(shù)組的單元是連續(xù)存放的,因此只要知既然數(shù)組的單元是連續(xù)存放的,因此只要知道數(shù)組第一個單元的地址,那么整個數(shù)組中任何道數(shù)組第一個單元的地址,那么整個數(shù)組中任何一個單元的地址也就可以計算出來,或者說只要一個單元的地址也就可以計算出來,或者說只要掌握了數(shù)組的第一個單元的指針,整個數(shù)組就掌掌握了數(shù)組的第一個單元

15、的指針,整個數(shù)組就掌握在手中了。握在手中了。 數(shù)組第一個單元的指針稱為數(shù)組的首地址,數(shù)組第一個單元的指針稱為數(shù)組的首地址,也稱為數(shù)組的地址,在也稱為數(shù)組的地址,在C語言中數(shù)組的首地址直語言中數(shù)組的首地址直接用數(shù)組名稱得到,例如數(shù)組接用數(shù)組名稱得到,例如數(shù)組 int a5; 則則a就是數(shù)組的首地址,也就是說,就是數(shù)組的首地址,也就是說,a就是就是&a0,a就是指向數(shù)組的指針。實際上這一規(guī)則對于任就是指向數(shù)組的指針。實際上這一規(guī)則對于任何類型的數(shù)組都是一樣的。何類型的數(shù)組都是一樣的。 圖7-11 int a5數(shù)組指針 既然數(shù)組名稱就是數(shù)組的首地址,也就可以通既然數(shù)組名稱就是數(shù)組的首地址,也

16、就可以通過數(shù)組指針去訪問數(shù)組的任何一個單元了,方法過數(shù)組指針去訪問數(shù)組的任何一個單元了,方法是把數(shù)組的地址指針加上一個作為數(shù)組下標的整是把數(shù)組的地址指針加上一個作為數(shù)組下標的整數(shù)就是數(shù)組的對應單元的地址。例如:數(shù)就是數(shù)組的對應單元的地址。例如: int a5; a是數(shù)組的首地址,既是數(shù)組的首地址,既&a0,而,而a+1是是a1的地址,的地址,既既&a1,*(a+1)是對應的單元變量,既是對應的單元變量,既a1。一。一般如般如i是數(shù)組的整數(shù)下標,則是數(shù)組的整數(shù)下標,則a+i是第是第i個單元的地個單元的地址,既址,既a+i就是就是&ai,同時,同時*(a+1)就是就是ai,

17、通過,通過*(a+i)去存取數(shù)組單元的值與用去存取數(shù)組單元的值與用ai去存取是完全去存取是完全一樣的。一樣的。 值得注意的是,值得注意的是,a+i不是簡單把不是簡單把a的二進制的二進制地址值加了一個整數(shù)地址值加了一個整數(shù)i,對于整數(shù)數(shù)組實際上,對于整數(shù)數(shù)組實際上a+i從二進制值上來說比從二進制值上來說比a地址多了地址多了sizeof(int)*i的值。的值。 1 指針移動指針移動 數(shù)組單元的指針可以通過數(shù)組指針加上一個數(shù)組單元的指針可以通過數(shù)組指針加上一個數(shù)組下標整數(shù)變量來得到,這種指針運算稱為指數(shù)組下標整數(shù)變量來得到,這種指針運算稱為指針移動運算。當指針加上一個正整數(shù)時,指針值針移動運算。當

18、指針加上一個正整數(shù)時,指針值變大了,它指向了存儲器的后面,稱指針后移,變大了,它指向了存儲器的后面,稱指針后移,或向下移動。實際上指針不但可以下移,也可以或向下移動。實際上指針不但可以下移,也可以上移。如指針加上一個負整數(shù),指針值變小了,上移。如指針加上一個負整數(shù),指針值變小了,它指向了存儲器的前面,稱指針前移,或向上移它指向了存儲器的前面,稱指針前移,或向上移動。動。 如指針的移動僅僅是一個單元,則常用如指針的移動僅僅是一個單元,則常用+ 或或的運算符來實現(xiàn)。通過指針在數(shù)組范圍內的運算符來實現(xiàn)。通過指針在數(shù)組范圍內的上下或前后移動可以隨意地存取數(shù)組的任何的上下或前后移動可以隨意地存取數(shù)組的任

19、何一個單元。一個單元。 2 指針比較指針比較 指針在數(shù)組中移動之后有前后之分,體現(xiàn)在它指針在數(shù)組中移動之后有前后之分,體現(xiàn)在它的二進制值有大小之分,因此指針可以通過其二的二進制值有大小之分,因此指針可以通過其二進制值來比較大小。指針指向后面的,其二進制進制值來比較大小。指針指向后面的,其二進制值大,這樣的指針大;指針指向前面的,其二進值大,這樣的指針大;指針指向前面的,其二進制值小,這樣的指針小。指針比較主要運算有:制值小,這樣的指針小。指針比較主要運算有: 大于大于 = 大于等于大于等于 = 小于等于小于等于= 相等相等 !=; 不等于不等于 比較運算的結果是一個邏輯值,通過比較兩比較運算的

20、結果是一個邏輯值,通過比較兩個指針的值可以知道它們在內存中的相對位置。個指針的值可以知道它們在內存中的相對位置。 3 指針的減法運算指針的減法運算 通過比較運算可以知道兩個指針的前后關通過比較運算可以知道兩個指針的前后關系,但怎樣知道它們之間的相對距離呢?要知系,但怎樣知道它們之間的相對距離呢?要知道它們的相對距離可以通過計算兩個指針的差道它們的相對距離可以通過計算兩個指針的差來得到,兩個指針的差是一個整數(shù),表示它們來得到,兩個指針的差是一個整數(shù),表示它們之間間隔的單元數(shù)(注意不是相差的字節(jié)數(shù))。之間間隔的單元數(shù)(注意不是相差的字節(jié)數(shù))。 7.4 數(shù)組與函數(shù)參數(shù)數(shù)組與函數(shù)參數(shù) 前面已經(jīng)講到過指

21、針可以作為函數(shù)參數(shù),而前面已經(jīng)講到過指針可以作為函數(shù)參數(shù),而數(shù)組與是指針密切相關,因此數(shù)組也可以作為數(shù)組與是指針密切相關,因此數(shù)組也可以作為函數(shù)參數(shù),數(shù)組作為函數(shù)參數(shù)實際上就是數(shù)組函數(shù)參數(shù),數(shù)組作為函數(shù)參數(shù)實際上就是數(shù)組指針作為函數(shù)參數(shù),其規(guī)則是:指針作為函數(shù)參數(shù),其規(guī)則是: 函數(shù)類型函數(shù)類型 函數(shù)名稱(數(shù)組類型函數(shù)名稱(數(shù)組類型 數(shù)組名稱數(shù)組名稱);); 或或 函數(shù)類型函數(shù)類型 函數(shù)名稱(數(shù)組類型函數(shù)名稱(數(shù)組類型 *數(shù)組名稱);數(shù)組名稱); 例如:例如: void fun(int a); void fun(int *a); 這兩種方式是等價的,注意在用第一種方這兩種方式是等價的,注意在用第

22、一種方式時不必在式時不必在中寫數(shù)組的大小。在調用函數(shù)時中寫數(shù)組的大小。在調用函數(shù)時實際參數(shù)就是數(shù)組的名稱,也就是數(shù)組指針。實際參數(shù)就是數(shù)組的名稱,也就是數(shù)組指針。 由于在調用函數(shù)時向函數(shù)傳遞的實際上是由于在調用函數(shù)時向函數(shù)傳遞的實際上是數(shù)組地址,因此要特別注意在函數(shù)中如對數(shù)組數(shù)組地址,因此要特別注意在函數(shù)中如對數(shù)組的單元進行了修改,實際上是對主函數(shù)的數(shù)組的單元進行了修改,實際上是對主函數(shù)的數(shù)組進行修改。進行修改。 另外一點要指出的是,數(shù)組在傳遞時傳遞另外一點要指出的是,數(shù)組在傳遞時傳遞的是數(shù)組指針,它不包含數(shù)組大小的信息,因的是數(shù)組指針,它不包含數(shù)組大小的信息,因此在向函數(shù)傳遞數(shù)組時一般要用一

23、個整數(shù)同時此在向函數(shù)傳遞數(shù)組時一般要用一個整數(shù)同時傳遞數(shù)組的大小。傳遞數(shù)組的大小。 如果實際參數(shù)是數(shù)組名稱,則向函數(shù)傳遞如果實際參數(shù)是數(shù)組名稱,則向函數(shù)傳遞的數(shù)組指針,但如實際參數(shù)是某個數(shù)組元素,的數(shù)組指針,但如實際參數(shù)是某個數(shù)組元素,那么因為數(shù)組元素是一個變量,因此傳遞方法那么因為數(shù)組元素是一個變量,因此傳遞方法與普通變量是一樣的,采用傳值的方式進行,與普通變量是一樣的,采用傳值的方式進行,函數(shù)中形式參數(shù)的變化不會影響對應的實參的函數(shù)中形式參數(shù)的變化不會影響對應的實參的數(shù)組元素。數(shù)組元素。 字符串實際上是內存中一段連續(xù)的字節(jié)單元中字符串實際上是內存中一段連續(xù)的字節(jié)單元中存儲的字符的總和,最后

24、用一個存儲的字符的總和,最后用一個0來標志它的來標志它的結束。前面已經(jīng)講解過字符串與字符數(shù)組是密切結束。前面已經(jīng)講解過字符串與字符數(shù)組是密切相關的,而數(shù)組又與指針密切相關的,因此字符相關的,而數(shù)組又與指針密切相關的,因此字符串與指針也密切相關。指向字符串的指針稱為字串與指針也密切相關。指向字符串的指針稱為字符串指針,其類型是符串指針,其類型是char *或或unsigned char *。實。實際上只要知道字符串的首地址的指針,那么就可際上只要知道字符串的首地址的指針,那么就可以通過移動指針存取字符串的每一個字符,當訪以通過移動指針存取字符串的每一個字符,當訪問到字符問到字符0時就是字符串的邊

25、界。因此可以用時就是字符串的邊界。因此可以用字符串指針來表示字符串。例如:字符串指針來表示字符串。例如:7.5 字符串與指針字符串與指針 char *s=”Hello”; 其中其中s就是一個字符串指針,在執(zhí)行該語句就是一個字符串指針,在執(zhí)行該語句時系統(tǒng)為時系統(tǒng)為”Hello”字符串分配字符串分配6個字節(jié)的空間,個字節(jié)的空間,同時把字符串的首地址既同時把字符串的首地址既H字符的地址賦值字符的地址賦值給給s指針變量。上述語句也可以寫成:指針變量。上述語句也可以寫成: char s=”Hello”; 用字符數(shù)組來存儲字符串時,數(shù)組的指針用字符數(shù)組來存儲字符串時,數(shù)組的指針就是字符串指針。通過就是字符

26、串指針。通過s指針可以訪問到任何指針可以訪問到任何一個字符單元,例如一個字符單元,例如i是一個整數(shù)下標,則是一個整數(shù)下標,則si與與*(s+i)是同一個元素,是同一個元素,&si與與s+i是同一個地是同一個地址,址,+s或或s可以使指針一次移動一個字節(jié)單可以使指針一次移動一個字節(jié)單元。元。 圖7-19 “Hello”的指針 字符串指針作為函數(shù)參數(shù)與普通的數(shù)組指字符串指針作為函數(shù)參數(shù)與普通的數(shù)組指針作為函數(shù)參數(shù)完全一樣,因為字符串指針實針作為函數(shù)參數(shù)完全一樣,因為字符串指針實際上也是字符數(shù)組的指針。應用中不同的是在際上也是字符數(shù)組的指針。應用中不同的是在普通數(shù)組作為函數(shù)參數(shù)時要同時向函數(shù)

27、傳遞數(shù)普通數(shù)組作為函數(shù)參數(shù)時要同時向函數(shù)傳遞數(shù)組的大小,但字符串指針作為函數(shù)參數(shù)傳遞字組的大小,但字符串指針作為函數(shù)參數(shù)傳遞字符串時由于字符串可以通過符串時由于字符串可以通過0的結束標志來的結束標志來判斷字符串的大小,因此不需要向函數(shù)傳遞字判斷字符串的大小,因此不需要向函數(shù)傳遞字符串的大小,只要傳遞字符串指針,在函數(shù)中符串的大小,只要傳遞字符串指針,在函數(shù)中就可以操作整個字符串了。就可以操作整個字符串了。 7.6 指針與二維數(shù)組指針與二維數(shù)組 指針數(shù)組就是數(shù)組的每一個元素都是一個指針數(shù)組就是數(shù)組的每一個元素都是一個指針變量,例如:指針變量,例如: int *p3; 則則p0、p1、p2這這3元

28、素都是整數(shù)指針。元素都是整數(shù)指針。 在二維數(shù)組中曾經(jīng)講到過二維數(shù)組是數(shù)組的數(shù)在二維數(shù)組中曾經(jīng)講到過二維數(shù)組是數(shù)組的數(shù)組,組, 例如:例如: int a34; 則則a0、a1、a2都是一位的數(shù)組,每個數(shù)組都是一位的數(shù)組,每個數(shù)組的元素個數(shù)是的元素個數(shù)是4,既然,既然a0、a1 、a2是一維是一維數(shù)組,因此它們也就是數(shù)組指針,既它們都是數(shù)組,因此它們也就是數(shù)組指針,既它們都是int*類型指針,類型指針, 換句話說可以:換句話說可以: p0=a0; p1=a1; p2=a2; 因此因此a0+0就是就是a00元素的指針元素的指針,a0+1是是a01元素的指針,元素的指針,a2+2是是a22元素的指元素

29、的指針,一般情況下,如針,一般情況下,如i(i=0,1,2)及)及j(j=0,1,2,3)是二維數(shù)組是二維數(shù)組a的下標變量,則的下標變量,則ai+j是是aij元素元素的指針,可以通過的指針,可以通過*(ai+j)來存取來存取aij元素。元素。 a是一個指針數(shù)組,有是一個指針數(shù)組,有3個指針元素,既個指針元素,既a0、a1、a2,而每一個指針數(shù)組都有,而每一個指針數(shù)組都有4個整數(shù)元個整數(shù)元素,素,a是一個是一個int (*)4類型的指針,既是一個指類型的指針,既是一個指針,該指針指向有針,該指針指向有4個整數(shù)的數(shù)組。個整數(shù)的數(shù)組。 設有二維數(shù)組:設有二維數(shù)組: int a34; 用它作為函數(shù)用它作為函數(shù)fun的參數(shù)可以寫成下列形式之一:的參數(shù)可以寫成下列形式之一: void fun(int a34,int m,int n); / 指定行數(shù)與列數(shù)指定行數(shù)與列數(shù) void fun(int a4,int m,int n); / 指定列數(shù)指定列數(shù) void fun(int (*a)4,int m,int n); / 指定指定a是一個指向有是一個指向有4個元素的整數(shù)數(shù)組的指針個元素的整數(shù)數(shù)組的指針 在用二維數(shù)組作函數(shù)參數(shù)時,第一維的數(shù)值可以省在用二維數(shù)組作函數(shù)參數(shù)時,第一維的數(shù)值可以省略,但第二維的數(shù)值不可以省略。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論