《東方一諾計算機二級C語言第8章指針》由會員分享,可在線閱讀,更多相關《東方一諾計算機二級C語言第8章指針(22頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,東方一諾技術培訓研發(fā)中心,第八章 指針,變量的地址和指針,指針變量,函數(shù)之間地址值的傳遞,函數(shù)返回地址值,8.1,變量的地址和指針,變量與地址,程序中,:int i;,float k;,內(nèi)存中每個字節(jié)有一個編號,-,地址,2002,內(nèi)存,0,.,.,2000,2001,2007,2003,i,k,2004,.,指針,:,一個變量的地址,指針變量,:,專門存放變量地址的變量叫指針變量,指針,指針變量,變量的,內(nèi)容,變量的,地址,.,.,2000,3000,3003,整型變量,i,10,變量,p,2003,.,
2、.,2000,&,與運算符,含義,含義,:,取變量的地址,單目運算符,優(yōu)先級,:14,結(jié)合性,:,自右向左,含義,:,取指針所指向變量的內(nèi)容,單目運算符,優(yōu)先級,:14,結(jié)合性,:,自右向左,兩者關系:互為,逆運算,理解,.,.,2000,2004,2006,2005,整型變量,i,10,變量,p,2001,2002,2003,2000,指針變量,p,-,指針變量,它的內(nèi)容是地址量,*,p,-,指針的,目標變量,,它的內(nèi)容是數(shù)據(jù),&,p,-,指針變量占用內(nèi)存的地址,p&i,*p i,p,=,&i,*p,=,i,8.2,指針變量,指針變量的定義,一般形式:,數(shù)據(jù)類型,*,指針名;,合法標識符,表
3、示定義指針變量,不是*運算符,例,int,*,p1,*,p2;,float *q;,char *name;,注意:,1、,int *p1,*p2;,與,int *p1,p2,;,2、,指針變量名是,p1,p2,不是*,p1,*p2,給指針變量賦值,指針變量的初始化,一般形式:,類型名 *指針名,=,初始地址值;,賦給指針變量,,不是賦給目標變量,例,int,i=1,*p;,p=,&i,;,1.,通過求地址運算符,(&),獲得地址值。,例:,int i=1;,int*p=,例,int,i;,int *p=,&i,;,int *q=,p,;,用已初始化指針變量作初值,2.,通過指針變量獲得地址值,
4、例,int *p=,&i,;,int,i;,注意:,1、,指針變量只能指向定義時所規(guī)定類型的變量,例:,char*p;,int i;,p=,例:,int *p,;,int i,;,p=&i,;,2,、指針變量定義后,,變量值不確定,,應用前必須先賦值,例,main(),int i=10;,int *p;,*p=i;,printf(“%d”,*p);,危險!,例,main(),int i=10,k;,int *p;,p=,*p=i;,printf(“%d”,*p);,指針變量必須,先賦值,再使用,.,.,2000,2004,2006,2005,整型變量,i,10,指針變量,p,2001,2002
5、,2003,隨機,給指針變量賦“空”值,零指針:,(,空指針,),表示:,int *p=NULL;,#define,NULL,0,int *p=NULL:,所以也可以:p=0;或p=0;,表示指針有一個確定的值-”空”,例:,inta=4,b=3,*p,*q,*w;,p=,則以下選項中錯誤的語句是(),A,、*,q=0;B,、,w=p;C,、*,p=a;D,、*,p=*w;,例 指針的概念,main(),int a;,int*pa=,a=10;,printf(%dn,a);,printf(%dn,*pa);,printf(%xn,printf(%xn,pa);,printf(%xn,運行結(jié)果:
6、,10,10,f86,f86,f8a,.,.,f86,f8e,f92,f90,整型變量,a,10,指針變量,pa,f88,f8a,f8c,f86,8.5,函數(shù)之間地址值的傳遞,(p100),特點:,共享內(nèi)存,“,雙向,”,傳遞,swap(int x),x=9;,main(),int a;,scanf(%d,swap(a);,printf(%dn,a);,例,1,值傳遞,運行結(jié)果:,5,#include,swap(int *p1),*p1=9;,main(),int a;,int*po1;,scanf(%d,po1=,swap(po1);,printf(%d n,a);,例,2,運行結(jié)果:,9,
7、地址傳遞,運行結(jié)果:,5,例,3,swap(int*p1),int b=9;,p1=,main(),int a;,int*po1;,scanf(%d,po1=,swap(po1);,printf(%d,*po1);,地址傳遞,swap(int x,int y),int t;,t=x;x=y;y=t;,main(),int a,b;,int*po1,*po2;,scanf(%d,%d,po1=,if(ab),swap(*po1,*po2);,printf(n%d,%dn,a,b);,例,4,值傳遞,運行結(jié)果:,5,9,例,5,swap(int*p1,int*p2),int*p;,p=p1;,p1
8、=p2;,p2=p;,main(),int a,b;,int*po1,*po2;,scanf(%d,%d,po1=,if(a*y),return,x,;,else,return,y,;,main(),int a=2,b=3;,int*p;,p=f1(,printf(%dn,*p);,.,2000,2008,200A,2002,2004,2006,2,3,指針變量,y,指針變量,x,(f1),2002,2000,COPY,變量,a,變量,b,(main),指針變量,p,*,例 寫一個函數(shù),求兩個int,型變量中居于較大值的變量的地址,.,.,2000,2008,200A,2002,2004,2006,2,變量,a,變量,b,(main),3,指針變量,p,*,2002,int*,f1(int*x,int*y),if(*x*y),return,x,;,else,return,y;,main(),int a=2,b=3;,int*p;,p=f1(,printf(%dn,*p);,本節(jié)總結(jié):,重點:,指針變量的定義及應用,難點:,&,和*運算符,易混淆點:,地址傳遞和值傳遞,東方一諾技術培訓研發(fā)中心,作業(yè):,8.17,:編寫函數(shù),其功能是對傳遞過來的兩個浮點數(shù)求出和值與差值,并通過形參傳送回調(diào)用函數(shù),