善于使用指針_第1頁
善于使用指針_第2頁
善于使用指針_第3頁
善于使用指針_第4頁
善于使用指針_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、8.1 什么是指針8.2 指針變量8.3 通過指針引用數(shù)組8.4 通過指針引用字符串8.5 提高部分第8章 善于使用指針P21018.1 什么是指針在定義變量時,系統(tǒng)就給這個變量分配內存單元。編譯系統(tǒng)根據程序中定義的變量類型,分配一定長度的空間。P21028.1 什么是指針內存區(qū)的每一個字節(jié)有一個編號,這就是內存單元的“地址”在地址所標志的內存單元中存放數(shù)據。P2103由于通過地址能找到所需的變量單元,我們可以說,地址指向該變量單元。在C語言中,將地址形象化地稱為“指針”。意思是通過它能找到以它為地址的內存單元。8.1 什么是指針P2104int a,b;ab20002004a=3;3直接訪問

2、8.1 什么是指針P2105int a;3aa_pointer2000a_pointer=&a;間接訪問定義特殊變量a_pointer2000通過a_pointer取值8.1 什么是指針P2106為了表示將數(shù)值送到變量中,可以有兩種表達方法:(1) 將3直接送到變量a所代表的單元中(2) 將3送到變量a_pointer所指向的單元(即a所代表的存儲單元)7指向就是通過地址來體現(xiàn)的假設a_pointer中的值是變量a的地址(2000),這樣就在a_pointer和變量a之間建立起一種聯(lián)系,即通過a_pointer能知道a的地址,從而找到變量a的內存單元8一個變量的地址稱為該變量的“指針”例如,地

3、址2000是變量i的指針如果有一個變量專門用來存放另一變量的地址(即指針),則它稱為“指針變量”a_pointer就是一個指針變量。指針變量就是地址變量,用來存放地址的變量,指針變量的值是地址(即指針)9“指針”和“指針變量”是不同的概念可以說變量a的指針是2000,而不能說a的指針變量是2000指針是一個地址,而指針變量是存放地址的變量常常將指針變量簡稱為指針108.2 指針變量8.2.1 使用指針變量訪問變量的例子8.2.2 怎樣定義指針變量8.2.3 怎樣引用指針變量8.2.4 指針變量作為函數(shù)參數(shù)P211118.2.1 使用指針變量訪問變量的例子例8.1 通過指針變量訪問整型變量。P2

4、11128.2.2 怎樣定義指針變量P212定義指針變量的一般形式為: 類型 * 指針變量名;如:int *p1, *p2;int是為指針變量指定的“基類型”基類型指定指針變量可指向的變量類型如pointer_1可以指向整型變量,但不能指向浮點型變量138.2.2 怎樣定義指針變量P212下面都是合法的定義和初始化:float *pointer_3;char *pointer_4;int a,b;int *pointer_1=&a,*pointer_2=&b;148.2.3 怎樣引用指針變量P214在引用指針變量時,可能有三種情況:給指針變量賦值。如:p=&a;引用指針變量指向的變量。如有 p

5、=&a; *p=1; 則執(zhí)行printf(“%d”,*p); 將輸出1引用指針變量的值。如:printf(“%p”,p);使p指向a*p相當于a以十六進制輸出a的地址158.2.3 怎樣引用指針變量P214要熟練掌握兩個有關的運算符:(1) 取地址運算符。 &a是變量a的地址(2) * 指針運算符(“間接訪問”運算符) 如果: p指向變量a,則*p就代表a。 k=*p; (把a的值賦給k) *p=1; (把1賦給a)168.2.4 指針變量作為函數(shù)參數(shù)P215 例8.3 利用函數(shù)交換兩個整數(shù)的值。178.3 通過指針引用數(shù)組P2208.3.1 數(shù)組元素的指針8.3.2 通過指針引用數(shù)組元素8.

6、3.3 用數(shù)組名作函數(shù)參數(shù)188.3.1 數(shù)組元素的指針P220一個變量有地址,一個數(shù)組包含若干元素,每個數(shù)組元素都有相應的地址指針變量可以指向數(shù)組元素(把某一元素的地址放到一個指針變量中)所謂數(shù)組元素的指針就是數(shù)組元素的地址19可以用一個指針變量指向一個數(shù)組元素 int a10=1,3,5,7,9,11,13,15,17,19; int *p; p=&a0;等價于p=a;等價于int *p=a;或int *p=&a0;注意:數(shù)組名a不代表整個數(shù)組,只代表數(shù)組首元素的地址?!皃=a;”的作用是“把a數(shù)組的首元素的地址賦給指針變量p”,而不是“把數(shù)組a各元素的值賦給p”。208.3.2 通過指針

7、引用數(shù)組元素引用數(shù)組元素,可用下面兩種方法: (1)下標法,用數(shù)組名加下標 如ai (2)指針法,即地址法。 *(a+i) 或*(p+i) (其中初值p=a)P22121指針運算:通過指針的運算,可以方便地引用數(shù)組中的元素。(1) 如果指針變量p已指向數(shù)組中的一個元素,則p+1指向同一數(shù)組中的下一個元素,p-1指向同一數(shù)組中的上一個元素。 float a10,*p=a; 假設a0的地址為2000,則p的值為2000p+1的值為200422(2) 如果p的初值為&a0,則p+i和a+i就是數(shù)組元素ai的地址,或者說,它們指向a數(shù)組序號為i的元素a0a1a2a3a4a5a6a7a8a9pp+1,a

8、+1 p+i,a+i p+9,a+9 23(3) *(p+i)或*(a+i)是p+i或a+i所指向的數(shù)組元素,即ai。a0a1a2a3a4a5a6a7a8a9pp+1,a+1 p+i,a+i p+9,a+9 *(p+i)24(4) 如果指針p1和p2都指向同一數(shù)組 p2-p1的值是4 不能p1+p2a0a1a2a3a4a5a6a7a8a9p1p2 258.3.3 用數(shù)組名作函數(shù)參數(shù)P224用數(shù)組名作函數(shù)參數(shù)時,因為實參數(shù)組名代表該數(shù)組首元素的地址,形參應該是一個指針變量C編譯都是將形參數(shù)組名作為指針變量來處理的26void fun(int arr ,int n) void main() voi

9、d fun(int arr,int n; int array10; fun (array,10); fun(int *arr,int n)27void fun(int arr ,int n) void main() void fun(int arr,int n; int array10; fun (array,10); array0arr0array數(shù)組arrarray3arr3arr+328 實參數(shù)組名是指針常量,但形參數(shù)組名是按指針變量處理在函數(shù)調用進行虛實結合后,它的值就是實參數(shù)組首元素的地址在函數(shù)執(zhí)行期間,形參數(shù)組可以再被賦值void fun (arr ,int n) printf(%

10、dn, *arr); arr=arr+3; printf(%dn, *arr); 298.4 通過指針引用字符串8.4.1 字符串的表示形式8.4.2 字符指針作函數(shù)參數(shù)8.4.3 對使用字符指針變量和字符數(shù)組的討論P229308.4.1 字符串的表示形式可以用兩種方法訪問一個字符串:(1) 用字符數(shù)組存放一個字符串,然后用字符數(shù)組名和下標可以訪問字符數(shù)組中的元素,也可以通過字符數(shù)組名用%s格式符輸出一個字符串。(2) 用字符指針指向一個字符串??梢圆欢x字符數(shù)組,而定義一個字符指針。用字符指針指向字符串中的字符。P22931 例8.10 定義字符指針,使它指向一個字符串。 #include

11、void main() char *string=I love China!; printf(%sn,string); stringIloveChina!0328.4.2 字符指針作函數(shù)參數(shù)如果想把一個字符串從一個函數(shù)“傳遞”到另一個函數(shù),可以用地址傳遞的辦法,即用字符數(shù)組名作參數(shù),也可以用字符指針變量作參數(shù)。在被調用的函數(shù)中可以改變字符串的內容在主調函數(shù)中可以引用改變后的字符串P233338.5 提高部分8.5.1 指針使用的技巧8.5.2 多維數(shù)組的指針8.5.3 指向函數(shù)的指針8.5.4 返回指針值的函數(shù)8.5.5 指針數(shù)組8.5.6 多重指針指向指針的指針P239348.5.1 指針使

12、用的技巧P239void copy_string(char *from, char *to) for( ;*from!=0;from+,to+) *to=*from; *to=0;while(*to=*from)!=0) to+; from+; 358.5.1 指針使用的技巧P239void copy_string(char *from, char *to) while(*to=*from)!=0) to+; from+; while(*to+=*from+)!=0) ;368.5.1 指針使用的技巧P239void copy_string(char *from, char *to) whil

13、e(*to=*from)!=0) to+; from+; while(*from!=0) *to+; *from+; 378.5.1 指針使用的技巧P239void copy_string(char *from, char *to) while(*from!=0) *to+; *from+; while(*from)388.5.1 指針使用的技巧P239void copy_string(char *from, char *to) while(*to+=*from+) ;for( ; (*to+=*from+); ) ;398.5.2 多維數(shù)組的指針指針變量可以指向一維數(shù)組中的元素,也可以指向多

14、維數(shù)組中的元素。 P24040int a34=1,3,5,7, 9,11,13,15,17,19,21,23;1357911131517192123a0a1a2aa+1a+2int (*p)4;指向一維數(shù)組的指針變量p=a+1;p指向a1行的開頭418.5.3 指向函數(shù)的指針如果在程序中定義了一個函數(shù),在編譯時,編譯系統(tǒng)為函數(shù)代碼分配一段存儲空間,這段存儲空間的起始地址,稱為這個函數(shù)的指針。P241428.5.3 指向函數(shù)的指針可以定義一個指向函數(shù)的指針變量,用來存放某一函數(shù)的起始地址,這就意味著此指針變量指向該函數(shù)。例如: int (*p)(int,int); 定義p是指向函數(shù)的指針變量,它

15、可以指向的函數(shù)類型為整型且有兩個整型形參 P241438.5.3 指向函數(shù)的指針定義的一般形式為:數(shù)據類型 (*指針變量名)(函數(shù)參數(shù)表列);如果要用指針調用函數(shù),必須先使指針變量指向該函數(shù)。如:p=max; 把max函數(shù)的入口地址賦給指針變量p P241448.5.3 指向函數(shù)的指針調用函數(shù)時,只需將(*p)代替函數(shù)名即可。例如:c=(*p)(a,b); 相當于:c=max(a,b);指向函數(shù)的指針變量的一個重要用途是把函數(shù)的入口地址作為實參傳遞給形參,此時形參是指向函數(shù)的指針變量。這樣就能夠在被調用的函數(shù)中使用實參函數(shù) P241458.5.4 返回指針值的函數(shù)一個函數(shù)也可以返回指針型的數(shù)據

16、。 例如: int *a(int x,int y); a是函數(shù)名,*表示此函數(shù)值是指針。 最前面的int表示返回的指針是指向整型變量的。 調用它以后能得到一個指向整型數(shù)據的指針(地址)。 P242468.5.4 返回指針值的函數(shù)返回指針值的函數(shù)一般定義形式為 類型名 *函數(shù)名(參數(shù)表列);這種形式與定義指向函數(shù)的指針變量很相似,但請注意:在*a兩側沒有括號。有括號就成指向函數(shù)的指針變量了。P242478.5.5 指針數(shù)組一個數(shù)組,若其元素均為指針類型數(shù)據,稱為指針數(shù)組。 例如: int *p4;p是數(shù)組,有4個元素*表示此數(shù)組是指針類型的,每個數(shù)組元素(相當于一個指針變量)都可指向一個整型變量

17、。 P242488.5.5 指針數(shù)組一維指針數(shù)組的定義的一般形式為 類型名數(shù)組名數(shù)組長度;P242498.5.5 指針數(shù)組指針數(shù)組比較適合用來指向若干個字符串,使字符串處理更加方便靈活可以分別定義一些字符串,然后用指針數(shù)組中的元素分別指向各字符串由于各字符串長度一般是不相等的,所以比用二維數(shù)組節(jié)省內存單元P242508.5.5 指針數(shù)組圖書館有若干本書,想把書名放在一個數(shù)組中,然后要對這些書目進行排序和查詢P242Great WallFORTRANComputer designBASICFollow mename0name1name2name3name4518.5.5 指針數(shù)組圖書館有若干本書,想把書名放在一個數(shù)組中,然后要對這些書目進行排序和查詢P242Great WallFORTRANComputer designBASICFollo

溫馨提示

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

評論

0/150

提交評論