《計算機語言與程序設計》第九講指針.ppt_第1頁
《計算機語言與程序設計》第九講指針.ppt_第2頁
《計算機語言與程序設計》第九講指針.ppt_第3頁
《計算機語言與程序設計》第九講指針.ppt_第4頁
《計算機語言與程序設計》第九講指針.ppt_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1,第九講 指 針,2,指針是C語言中的一個重要概念。掌握指針的用法,可使程序簡潔、高效、靈活,但并不難學。 為了了解什么是指針,先看一個小故事地下工作者阿金接到上級指令,要去尋找打開密電碼的密鑰,這是一個整數。幾經周折,才探知如下線索,密鑰藏在一棟三年前就被貼上封條的小樓中。一個風雨交加的夜晚,阿金潛入了小樓,房間很多,不知該進哪一間,正在一籌莫展之際,忽然走廊上的電話鈴聲響起。藝高人膽大,阿金毫不遲疑,抓起聽筒,只聽一個陌生人說:“去打開211房間,那里有線索”。阿金疾步上樓,打開211房間,用電筒一照,只見桌上赫然6個大字:地址1000。阿金眼睛一亮,迅速找到1000房間,取出重要數據6

2、6,完成了任務。,3,我們畫出下圖,211,1000,P,說明: 1、數據藏在一個內存地址單元中,地址是1000。 2、地址1000又由P單元所指認,P單元的地址為211。 3、66的直接地址是1000;66的間接地址是211;211中存的是直接地址1000。 4、稱P為指針變量,1000是指針變量的值,實際上是有用數據藏在存儲器中的地址。,4,指針變量用來存放另一變量地址的變量變量的指針就是變量的地址。 1、指針的概念 指針是一種特殊的變量,特殊性表現(xiàn)在類型和值上。 從變量講,指針也具有變量的三個要素: (1)變量名,這與一般變量取名相同,由英文字符開始。 (2)指針變量的類型,是指針所指向

3、的變量的類型,而不是自身的類型。 (3)指針的值是某個變量的內存地址。,5,從上面的概念可知,指針本身類型是int型,因為任何內存地址都是整型的。但是指針變量的類型卻定義成它所指向的變量的類型。 2、指針的定義(說明,先說明后引用) 例如: int *p, *q;/ 定義p,q為指向整數類型變量的指針 float *point; / 定義point為指向float型變量的指針 double *pd; / 定義pd為指向double型變量的指針 int (*pa)10;/ 定義pa為指向int型數組的指針 int (*pu)();/ 定義pu為指向int型函數的指針 int *qq;/ 定義qq

4、為指向int型指針的指針 還有指向結構、聯(lián)合的指針,后面再介紹,6,3、指針賦值 例 int akey;/ 定義一個整型變量akey int *p,*q;/ 定義p,q為指向整型變量的指針變量 akey=66;/ 將66賦給akey p = / 將p的值賦給q,見圖2,7,q = p;/ 將p的值賦給q,見圖2,8,/ 指針1.c #include /預編譯命令 void main() /主函數 /函數體開始 int a5=0,1,2,3,4; /定義數組,賦初值 int *p1,*p2; /定義指針變量 p1= /輸出a1和a2的值 /函數體結束,9,說明:見圖, /定義整型變量 int *

5、p,*q; /定義指針變量 akey=66; /賦值給變量akey p= /輸出b的值 /函數體結束,4、向指針所指向的內存單元賦值,11,12,/ 指針3.c #include /預編譯命令 void main() /主函數 /函數體開始 int a5=1,3,5,7,9; /定義數組,賦初值 int *p; /定義指針變量 int i; /定義整型變量 p=a; /賦值給指針變量,讓p指向a數組for(i=0;i5;i=i+1) /循環(huán)體開始 printf(a%d=%dn,i,*p);/輸出a數組元素的值 p=p+1; /指針變量加1 /循環(huán)體結束 /函數體結束,5、指針與數組先看一個程序

6、,13,說明 (1) p=a; 這里數組名作為數組的起始地址,即a0的地址。因此 p=a 等效于 p=,p,p+1,p+2,p,p+1,p+2,等效,14,/ 指針4.c #include /預編譯命令 void main() /主函數 /函數體開始 int a5=1,3,5,7,9; /定義數組,賦初值 int *p; /定義指針變量 int i=0; /定義整型變量,賦初值 for(p=a;pa+5;p=p+1) /賦值給指針變量,讓p指向a數組 /循環(huán)體開始 printf(a%d=%dn,i,*p); /輸出a數組元素的值 i=i+1; /讓i加1 /循環(huán)體結束 /函數體結束,做下面的實

7、驗,15,/ 指針5.c #include void main() char *p;/ 定義指向字符類型的指針變量p static char s = “abcdefgh”;/ 定義字符數組,并賦值 p=s;/ 數組名是一個常量指針, / 它指向該數組首地址 while (*p != 0)/ 當p所指向的數組元素不為0時 p=p+1;/ 讓指針加1 printf(“字串長度為%dn”,p-s);/ 輸出字串長 ,數組名是一個常量指針,指向該數組的首地址,例,16,s,s,p,圖中數組的首地址是s0的地址,即 /定義數組, / 賦初值為數字字符串 char *p= / 換行 ,數組名是一個常量指針

8、,指向該數組的首地址,例,18,shuzi,p,說明: 1、字符串: 數字字符串。 2、p指向shuzi8,即指向串中的字符1。 3、直到型循環(huán),用putchar函數將shuzi8輸出到屏幕;之后讓p=p-1。 4、在while中,當p=shuzi則繼續(xù)執(zhí)行循環(huán)體。一旦 pshuzi 則退出循環(huán)。這種做法使輸出結果為 123456789 5、在本例中數組名shuzi是一個常量指針,永遠指向shuzi0的地址上。 思考:如何通過p和shuzi求該數字字符串的長度,19,/ 指針7.c #include /預編譯命令 void main() /主函數 /函數體開始 int i; char *p;

9、/定義指針變量,賦初值 p=computer; /指針賦初值,指向字苻串 printf(%sn,p); /輸出字苻串 for (i=0;i8;i=i+1) /循環(huán)體開始 putchar(pi); /輸出第i個字苻 /循環(huán)體結束 putchar(n); /換行 while(*p) /循環(huán)體開始 putchar(*p); /輸出p所指向的字符 p=p+1; /指針變量值加1 /循環(huán)體結束 putchar(n); /換行 /函數體結束,20,上例中有三種不同的輸出方式,請你自己分析一下,各有什么特點 說明: 1、對字符指針變量賦值的寫法 (1)char *p;(2) char *p=“compute

10、r”; p = “computer”; 以上兩種都行??梢哉w賦值。 2、對字符數組賦初值的寫法 (1)char as12=“department”;/ 可以。在定義時可以整體賦值 char as =“department”;/ 可以。在定義時可以整體賦值 (2)char as12; as = “department”; / 不可以!不可以整體賦值 as12=“department”; /不可以!不可以整體賦值,21,#include /預編譯命令 void main() /主函數 /函數體開始 int i; char s = “China; /s 為字符數組 char* t = s ; /t

11、為指向字符數組的指針變量 / p為指針數組變量,p數組元素依次指向 / 字符串“China,“Canada,“Denmark,“Greece char* p =“China,“Canada,“Denmark,“Greece“; /q為指針數組變量,q數組元素依次指向指針數組元素 /p0,p2,p3,p1 char* q =p,p+2,p+3,p+1;,例題分析,22,/輸出1.1: s 的地址 cout1.1: 輸出 s 的地址“,23,1.1:輸出 s 的地址0 x0012FF78 1.2:輸出 s 的內容China 1.3:輸出 t 指向的內容China 1.4:輸出 *t 表示的內容C

12、1.5:輸出 *s 表示的內容C 1.6:輸出 t 所在的地址0 x0012FF74,結果,24,/輸出2.1: P0 指向的字符串 cout2.1: 輸出 P0 指向的字符串 “p0endl; /輸出2.2: P1 指向的字符串 cout2.2: 輸出 P1 指向的字符串 “p1endl; /輸出2.3: P2 指向的字符串 cout2.3: 輸出 P2 指向的字符串 “p2endl; /輸出2.4: P3 指向的字符串 cout2.4: 輸出 P3 指向的字符串 “p3endl;,25,2.1: 輸出 P0 指向的字符串 China 2.2: 輸出 P1 指向的字符串 Canada 2.3

13、: 輸出 P2 指向的字符串 Denmark 2.4: 輸出 P3 指向的字符串 Greece,結果,26,/輸出3.1: p0本身的地址 cout “3.1: 輸出p0本身的地址“ ,27,3.1: 輸出p0本身的地址0 x0012FF64 3.2: 輸出p1本身的地址0 x0012FF68 3.3: 輸出p2本身的地址0 x0012FF6C 3.4: 輸出p3本身的地址0 x0012FF70,結果,28,/ 輸出4.1: q0指向的內容 cout 4.1: 輸出q0指向的內容 q0 endl; / 輸出4.2: q1指向的內容 cout 4.2: 輸出q1指向的內容 q1 endl; /

14、輸出4.3: q2指向的內容 cout 4.3: 輸出q2指向的內容 q2 endl; / 輸出4.4: q3指向的內容 cout 4.4: 輸出q3指向的內容 q3 endl;,29,4.1: 輸出q0指向的內容0 x0012FF64 4.2: 輸出q1指向的內容0 x0012FF6C 4.3: 輸出q2指向的內容0 x0012FF70 4.4: 輸出q3指向的內容0 x0012FF68,結果,30,/ 輸出5.1: q0指向的內容的內容 cout 5.1: 輸出q0指向的內容的內容 *q0 endl; / 輸出5.2: q1指向的內容的內容 cout 5.2: 輸出q1指向的內容的內容 *q1

溫馨提示

  • 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

提交評論