- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
指標(Pointer)C Language1CSIM, PUIntroduction to the C Programming Language
指標 (Pointer)C Language2CSIM, PU? 指標變數所存放的內容為記憶體位置,而指標變數在記憶體中佔幾個記憶體位元組,則視所使用的語言系統而定,以Turbo C而言是2個位元組.? 宣告指標變數時,需在變數名稱前加個* 號以玆識別.? * 號除了在指標變數宣告時使用外,最主要是用來存取pointer所指到的變數值.例: *pa=0; [ 將0存入pa所指的變數內]y=*pa; [ 取pa所指的變數值(0),再設給y ]pa=x; [ 以符號取得x的位址,存入pa(把pa指向x) ]y=*pa; [ 把pa所指的變數存入y ]? 若指標沒指到任何一個位置,其初值要設為NULL,NULL在 stdlib.h,stdio.h,stddef.h,mem.h,alloc.h的標頭檔皆有定義.
指標 (Pointer)? 範例一: 指標的運算? #includestdio.h? void main()? {? int *ptr,i,val;? i=20;? ptr=i;? val=*ptr;? printf(val=%dn,val);? }? 1A;ptr 所指的位址等於 i 的位址C Language3CSIM, PU
指標 (Pointer)? 範例二: 指標的應用 #includestdio.h main(){int a=3,b=4;int *fp;*fp=100;printf( passing *fp=100 , a value change=%d \n , a );fp=b;printf(passing fp=b , fp value change=%d\n, *fp );}printf(The original values are: a=%d , b=%d \n , a , b ); printf(The Address are : a=0x%p , b=0x%p \n, a , b ); fp=a;以 取得 a 變數的位址, 將位址設給 fp ( fp 指向a)把100存入 fp 所指的變數內以 取得 b 變數的位址, 將位址設給 fp ( fp 轉指向b)宣告 : fp 是指向整數變數的pointer利用 * 號 間接取值C Language4CSIM, PU
以指標來傳引數? 範例三:設計一個傳值函式noswap(),及一個傳址函式swap(),將從主程式傳來的兩個正數引數值互相對調#includestdio.hmain(){int x=2,y=3;void noswap(int a , int b ); void swap( int *a , int *b );printf(The original values are: x=%d , y=%d \n , x , y );noswap(x,y);printf(The x y are changed : x=%d , y=%d \n, x , y );swap(x,y);printf(The x y are changed : x=%d , y=%d \n, x , y );}傳入pointer值(變數位址即為pointer的值)C Language5CSIM, PU
以指標來傳引數C Language6CSIM, PU? 接上頁(範例三)void noswap ( int a , int b ){int t; t=a; a=b; b=t;}void swap ( int *a , int *b){int t; t=*a;*a=*b;*b=t;}
指位器的指位器C Language7CSIM, PU? 指標(pointer)也可以指向指標,可稱為“指位器的指位器“? 指位器的指位器的宣告方式:? int **pa;? 亦可寫成int*(*pa) [ pa是一個pointer,它指向一個整數的pointer ]
以指標來傳引數C Language8CSIM, PU? 範例四: 指標以位址傳遞(call by address)#includestdio.h main(){int a=1,b=2,*p,*q;void sub( int ** , int ** ); p=a;q=b; sub(p,q);printf(a=%d b=%d n , *p , *q );}void sub ( int **x , int **y ){*x=*y;}1A;
C LanguageCSIM?, PU指標與陣列的關係? 在C語言裡,指標與陣列的關係密不可分,兩者的差別是:陣列是固定長度的連續實體,而指標則是用來記錄位址的
文档评论(0)