C二級第08章演示_第1頁
C二級第08章演示_第2頁
C二級第08章演示_第3頁
C二級第08章演示_第4頁
C二級第08章演示_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第第8章章 地址和指針地址和指針C語言程序設計語言程序設計第第8章章 地址和指針地址和指針8.1 變量的地址和指針變量的地址和指針8.2 指針變量的定義和基類型指針變量的定義和基類型8.3 給指針變量賦值給指針變量賦值8.4 對指針變量的操作對指針變量的操作8.5 函數之間地址值的傳遞函數之間地址值的傳遞3/26C C程序中每一個實體,如變量、數組和函數等,程序中每一個實體,如變量、數組和函數等,都要在內存中占有一個存儲區域,其第一個都要在內存中占有一個存儲區域,其第一個字節的地址被稱為首地址字節的地址被稱為首地址例如:例如: short int a,bshort int a,b; ;floa

2、t x;float x;4/26short intshort int * *p;p;5/26地址與指針地址與指針 int int a; a; a=1; a=1;以上兩條語句,就其計算機內部來講,執行過以上兩條語句,就其計算機內部來講,執行過程可以有兩種方法:直接賦值和間接賦值。程可以有兩種方法:直接賦值和間接賦值。C語言程序設計語言程序設計第第8章章 地址和指針地址和指針8.1 變量的地址和指針變量的地址和指針8.2 指針變量的定義和基類型指針變量的定義和基類型8.3 給指針變量賦值給指針變量賦值8.4 對指針變量的操作對指針變量的操作8.5 函數之間地址值的傳遞函數之間地址值的傳遞7/26

3、基類型名基類型名 指針變量名指針變量名, ,; ;如定義:如定義:intint * *pi1,pi1,* *pi2pi2;doubledouble * *pd1,pd1,* *pd2;pd2;指針變量的定義格式及基類型指針變量的定義格式及基類型基類型代表指針變量所指向的變量的數據類型基類型代表指針變量所指向的變量的數據類型C語言程序設計語言程序設計第第8章章 地址和指針地址和指針8.1 變量的地址和指針變量的地址和指針8.2 指針變量的定義和基類型指針變量的定義和基類型8.3 給指針變量賦值給指針變量賦值8.4 對指針變量的操作對指針變量的操作8.5 函數之間地址值的傳遞函數之間地址值的傳遞9

4、/261. 通過通過&獲得變量地址獲得變量地址intint k=1, k=1, * *p,p,* *q;q;q=&k;q=&k;注:注:&只能用于變量和數組只能用于變量和數組元素,不能用于表達式、常元素,不能用于表達式、常量等,即量等,即q=&(k+1);q=&(k+1);為不合法為不合法10/262. 通過指針變量獲得地址通過指針變量獲得地址intint k=1, k=1, * *p,p,* *q;q;q=&k;q=&k; p=q; p=q;11/263. 通過標準函數獲地址通過標準函數獲地址在第在第1313章介紹應用章介紹應用

5、mallocmalloc函數函數calloccalloc函數函數12/268.3.2 給指針變量賦給指針變量賦“空空”值值P=NULL;P=NULL;P=0P=0P=0;P=0;C語言程序設計語言程序設計第第8章章 地址和指針地址和指針8.1 變量的地址和指針變量的地址和指針8.2 指針變量的定義和基類型指針變量的定義和基類型8.3 給指針變量賦值給指針變量賦值8.4 對指針變量的操作(定義和使用是兩對指針變量的操作(定義和使用是兩個不同的概念,但可能出現相同的寫法)個不同的概念,但可能出現相同的寫法)8.5 函數之間地址值的傳遞函數之間地址值的傳遞14/268.4.1 指針應用一(指針應用一

6、(&、*)&:取地址運算符:取地址運算符* * : 指針運算符(間接訪問運算符,即后面指針運算符(間接訪問運算符,即后面跟指針變量或地址。自右向左的結合性)跟指針變量或地址。自右向左的結合性)即使用指針:即使用指針:int int * *p,ip,i=10,j;(=10,j;(定義定義) ) p=&i; p=&i;j=j=* *p;(p;(使用,把使用,把p p所指的變量的值賦值所指的變量的值賦值j j。相當于相當于j=i)j=i) j= j=* *(&i);(&i);(使用(使用, ,把把i i地址中的值賦值地址中的值賦值j j)15/26指針

7、應用二(指針應用二(&、*) int int * * *p,p,* *s,ks,k=20;=20;S=&k;pS=&k;p=&s;=&s;則則* *s s代表存儲單元代表存儲單元k k,* *p p代表存儲單元代表存儲單元s,s,* * *p p代代表存儲單元表存儲單元k.k.即:指針應用時,指針變量前加即:指針應用時,指針變量前加* *,相當于取指,相當于取指針變量的值:針變量的值:* *s s即即s s所指的變量的值,即值所指的變量的值,即值 * *p p即即p p所指的指針變量的值,所指的指針變量的值,即的地址值即的地址值* * *p p即取即取s

8、 s的地址內的值,即的地址內的值,即k k值值) )16/26指針應用三指針應用三 int int * *p,kp,k=0;=0; p=&k; p=&k;現將現將100100存入存入k k中,即中,即* *p=100;(p=100;(相當于相當于k=100)k=100)若若* *p=p=* *p+1,p+1,即將所指的變量的值加一后,即將所指的變量的值加一后,再放入所指的存儲單元中。即將再放入所指的存儲單元中。即將100100加一加一變為變為101101后放入所指的變量中去。后放入所指的變量中去。所以賦值運算符左側代表指針的存儲單元;右所以賦值運算符左側代表指針的存儲單元;右側

9、代表指針所指的存儲單元的內容。側代表指針所指的存儲單元的內容。寫成寫成* *p+=1p+=1或或+* *p p或或( (* *p)+p)+注:注:* *p+p+中,中,+優先級等于優先級等于* *, ,* *滿足自右向左滿足自右向左結合性結合性17/26指針應用四指針應用四(&(&、* *) )均為一元運算符、右結合性均為一元運算符、右結合性設設 int x=10; int int x=10; int * *pxpx=&x;=&x;pxpx&xx* *pxpxx* *&x&x* *px&x&x&* *pxpxpxp

10、x* *pxpx+* *(px(px+)+)( (* *pxpx)+)+x+x+18/26例例8.1 選出較小數選出較小數#include stdio.h#include main()main() int a,b,min, int a,b,min,* *pa,pa,* *pb,pb,* *pminpmin; ; pa=&a; pb=&b; pmin pa=&a; pb=&b; pmin=&min;=&min; scanf(%d%d,pa,pb scanf(%d%d,pa,pb); ); printf(a=%d,b=%dn,a,b printf(a

11、=%d,b=%dn,a,b); ); * *pminpmin= =* *pa;pa; if( if(* *papa* *pb) pb) * *pmin=pmin=* *pbpb; ; printf(min=%dn,min printf(min=%dn,min); ); 12 1512 15a=12,b=15a=12,b=15min=12min=1219/268.4.2 指針的移動與比較指針的移動與比較設設px,pypx,py是類型相同的指針變量,是類型相同的指針變量,n n為整為整型變量,則型變量,則:px+npx+n px-npx-n pxpx+ + pxpx- +- +pxpx - -px

12、px px-py px-py pxpx pypy pxpx=pypy px px pypy pxpx=pypy pxpx=pypy pxpx!=!=pypy px=&x py=&y px=pypx=&x py=&y px=py 均為合法的運算均為合法的運算C語言程序設計語言程序設計第第8章章 地址和指針地址和指針8.1 變量的地址和指針變量的地址和指針8.2 指針變量的定義和基類型指針變量的定義和基類型8.3 給指針變量賦值給指針變量賦值8.4 對指針變量的操作對指針變量的操作8.5 函數之間地址值的傳遞函數之間地址值的傳遞21/268.5.1 函數之間地址值的

13、傳遞函數之間地址值的傳遞例例8.2 8.2 編寫函數編寫函數myadd(int myadd(int * *a, inta, int * *b), b), 函數函數中把指針中把指針a a和和b b所指的存儲單元中的兩個值相所指的存儲單元中的兩個值相加,將和值作為函數值返回。加,將和值作為函數值返回。22/26#includeint myadd(int *a, int *b) int sum; sum=*a+*b; return sum;main() int x,y,z; printf(Enter x and y:n); scanf(%d%d,&x,&y); z=myadd(&am

14、p;x,&y); printf(%dn,z);23/268.5.2 被調函數改變調用函數的值被調函數改變調用函數的值例例8.3 8.3 調用函數交換主函數中變量調用函數交換主函數中變量x x和和y y的值的值24/26#include stdio.h#include void main(voidvoid main(void) ) void swap(int , int void swap(int , int); ); int int a=3,b=5; a=3,b=5; printf printf(交換前:交換前:%d, %dn,a,b%d, %dn,a,b); ); swap(aswa

15、p(a, b);, b); printf printf(交換后:交換后:%d, %dn,a,b%d, %dn,a,b); ); void swap(int p1, intvoid swap(int p1, int p2) p2) int int t; t; t=p1 t=p1; p1=p2p1=p2; p2=t;p2=t; 交換前:交換前:3, 53, 5交換后:交換后:3, 53, 525/26#include stdio.h#include void main(voidvoid main(void) ) void swap( void swap(intint * *, int, int *

16、 *); ); int int a=3,b=5; a=3,b=5; printf printf(交換前:交換前:%d, %dn,a,b%d, %dn,a,b); ); swap(swap(&a,a,&b b); ); printf printf(交換后:交換后:%d, %dn,a,b%d, %dn,a,b); ); void swap(intvoid swap(int * *p1, intp1, int * *p2)p2) int int t; t; t= t=* *p1p1;* *p1=p1=* *p2p2;* *p2p2=t;=t; 交換前:交換前:3, 53, 5交換后:

17、交換后:5, 35, 326/26例例8.4編寫函數編寫函數void order(int void order(int * *a, inta, int * *b)b),使調,使調用函數中的第一個實參總是存放兩個數中較用函數中的第一個實參總是存放兩個數中較小者。小者。27/26#include void swap(int *x1, int *x2) int t; t=*x1,*x1=*x2,*x2=t;void order(int *a, int *b) if(*a*b) swap(a,b);main() int x,y; printf(Enter x,y:n); scanf(%d%d,&x,&y); printf(x=%d,y=%dn,x,y); order(&x,&y); printf(x=%d,y=%dn,x,y);28/268.5.3 返回指針的函數返回指針的函數#include stdio.h#include int int * *fun(intfun(int* *,int,int*

溫馨提示

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

評論

0/150

提交評論