• /  55
  • 下載費用: 9.90積分  

C語言程序設計教程課件第8章.ppt

'C語言程序設計教程課件第8章.ppt'
第8章 指 針C 語言程序設計北京科技大學 計算機系1 8.1 指針和指針變量 8.2 指針與數組 8.3 指針與函數第8章 指針Date28.1 指針和指針變量 main(){float x; int y; … }8.1.1 指針和指針變量的概念變量的兩個物理意義 200020012002200320042005…xy變量的內容變量的地址Date38.1 指針和指針變量 main(){int a,b,c; a=5; b=3; c=a +b; … } 8.1.1 指針和指針變量的概念200020012002200320042005abc5直接將整數 5 存入變量 a 3直接將整數 3 存入變量 b8 直接將變量 a、b 的值取出,相加后存入變量 c 利用變量名存取數據的方式稱為“直接存取”方式。Date4 C 語言還提供了對內存單元的“間接存取”方式p20002001200220032004200520062007abc532004a和b相加的結果(*p=a+b)存放到變量p所指向的內存單元中去。此時c稱為指針變量p的目標變量。p2004cp=&c8 main(){int a=5,b=3,c,*p; p = &c; *p = a + b; … }8.1 指針和指針變量8.1.1 指針和指針變量的概念●變量的地址稱為變量的指針●存放地址的變量稱為指針變量Date5 main(){ int a,*p=&a; float x,*q=&x; … }2000200120022003200420052006200720082009apxq20048.1 指針和指針變量8.1.2 指針變量的定義2000 main(){int a,*p; float x,*q; p = &a; q = &x; … }指針變量定義的形式指針變量初始化Date6 main(){ int a,*p=&a; float x,*q=&x; *p = 5; printf("a+3=%d\n",*p+3); … }間接存取運算2000200120022003200420052006200720082009apxq20048.1 指針和指針變量8.1.3 指針的基本運算2000*p = &a;× main(){int a,*p; float x,*q; p = &a; q = &x; … }賦值運算5Date7方法1:目標變量值不變,改變指針變量的 指向求解。 main( ) { int a,b,*p1,*p2,*p; p1=&a;p2=&b; scanf(″%d%d″,p1,p2); if(*p1<*p2) { p=p1; p1=p2; p2=p;} printf(″a=%d,b=%d\n″,a,b); printf(″max=%d,min=%d\n″,*p1,*p2); }abp1p2p68a=6,b=8max=8,min=68.1 指針和指針變量【例8.1】輸入a、b兩個整數, 使用指針變量按大小順序輸出 這兩個整數。 Date8方法2:利用指針變量直接改變目標變量的值 求解。 main() { int a,b,t,*p1,*p2; p1=&a;p2=&b; scanf(″%d%d″,p1,p2); if(*p1 p1、p2 == p1。② 指針與一個整型數據進行比較是沒有意 義的 。③ 不同類型指針變量之間比較是非法的。④ NULL可以與任何類型指針進行==、!= 的關系運算,用于判斷指針是否為空指針 。Date11⑴ 數組名是該數組的指針 a是數組的首地址(即a[0]的地址),是一 個指針常量。 a = &a[0],a+1 = &a[1], … ,a+9 = &a[9] 數組元素的下標表示法: a[0],a[1], … ,a[i], … ,a[9] 數組元素的指針表示法: *(a+0),*(a+1), … ,*(a+i), … ,*(a+9)8.2 指針與數組8.2.1 指向數組的指針1. 一維數組的指針 例如: int a[10],*p; a[0]a[9]paDate12 當p指向a[0]時,用p表示數組元素 下標法: p[0],p[1], … ,p[i], … ,p[9] 指針法: *(p+0),*(p+1), … ,*(p+i), … ,*(p+9)a[0]a[9]p8.2 指針與數組8.2.1 指向數組的指針1. 一維數組的指針 ⑵ 指向一維數組元素的指針變量 由于數組元素也是一個內存變量,所以此類指針變量的定義和使用與指向變量的指針變量相同。例如:int a[10],*p; p = a;(或 p = &a[0];) aDate13a[0]a[9]pa【例8.3】用指針法輸出數組元素。ma。省略部分。類型標識符 (*函數指針變量名)( ); 其中“*函數指針變量名”必須用圓括號括起來,否則就成為聲明一個指針型函數了。在定義中“(*函數指針變量名)”右側的括號“( )”表示指針變量所指向的目標是一個函數,“數據類型標識符”是定義指針變量所指向的函數的類型。例如: int (*p)( ); /*p是一個指向整型函數的指針變量*/ float (*q)( ); /*q是一個指向單精度實型函數的指針變量*/ 在C語言中,函數名具有與數組名類似的特性,數組名代表數組的首地址,函數名代表函數的起始地址(即該函數的程序代碼段在內存中所占用的存儲空間的首地址,也稱函數入口)。因此也可以把函數名賦給一個函數指針變量,使其成為指向該函數的指針變量。函數名則可以看成是函數指針常量。 Date508.3 指針與函數 8.3.4 指向函數的指針2. 用函數指針變量調用函數 用函數指針變量調用函數的一般形式: (*函數指針變量名)(實參表); 由于優先級不同“*函數指針變量名”必須用圓括號括起來,表示間接調用指針變量所指向的函數;右側括號中為傳遞到被調函數的實參。 函數指針與變量指針的共同之處是都可以做間接訪問。變量指針指向內存的數據存儲區,通過間接存取運算訪問目標變量;函數指針指向內存的程序代碼存儲區,通過間接存取運算使程序流程轉移到指針所指向的函數入口,取出函數的機器指令并執行函數,完成函數的調用。 Date518.3 指針與函數 8.3.4 指向函數的指針main( ){int max( ),a,b,c; /*聲明被調用的目標函數max */ int (*p)( ); /*定義p為指向整型函數的指針變量*/ p = max; /* 用指針變量存儲函數入口地址 */ scanf(“%d%d”,&a,&b); c=(*p)(a,b); /* 用指針變量調用函數 */ printf(“max=%d”,c);}max(int x,int y) /* 函數名是函數的入口地址 */{if(x>y) return(x); else return(y);}由于優先級的問題,()是必須的目標函數必須要事先聲明, 即使是整型函數也要聲明(*p)中( )是必須的,實參表應與函數的形參表一一對應Date52 將函數指針作為參數,可在主調函數和被調函數之間將第三個函數作為參數傳遞,實現在被函數中調用不同函數的目的,使被調函數成為通用函數。 函數指針作函數參數時,形參一定要定義為指向函數的指針變量,實參則可以是函數名或指向函數的指針變量。 【例8.28】編制一個用弦截法求方程根的函數,求解下列方程。 x3-5x2+6x-30=0 2x3-4x2+3x-6=0 Y f(x) (x2,f(x2)) 0 x1 x x0 x2 X (x1,f(x1)) 圖8.21 弦截法求方程的根示意圖8.3 指針與函數 8.3.4 指向函數的指針3. 函數指針作函數的參數 由直線方程推出公式:Date538.3 指針與函數 float root(float (*fun)(float)) { float x,x1,x2,y,y1,y2; do /*選定一個單調變化的區間 */ { …… }while (y1*y2>=0); do { x=(x1*y2-x2*y1)/(y2-y1); y=(*fun)(x); if (y*y1=0.0001); return x; } 選定一個單調變化的區間[x1,x2] 按公式計算x=(x1*y2-x2*y1)/(y2-y1) y=f(x) y*y1=1e-4) x為方程的根圖8.22 弦截法求方程的根N-S圖 Y f(x) (x2,f(x2)) 0 x1 x x0 x2 X (x1,f(x1)) 圖8.21 弦截法求方程的根示意圖被積函數如何解決root函數適用于不同的被積函數?通過指向函數的指針變量調用函數f(x);不可用固定函數名Date548.3 指針與函數 #include void main( ){ float f1(float), f2(float), root(float (*)(float)); float x1,x2; x1=root(f1); /* 函數名f1作實參 */ printf("A root of the first equation:%8.4f\n",x1); x2=root(f2); /* 函數名f2作實參 */ printf("A root of the second equation:%8.4f\n",x2); }float f1(float x){ return(x*x*x-5*x*x+6*x-30); }float f2(float x){ return(2*x*x*x-4*x*x+3*x-6); }對被調函數的聲明 Date55
關 鍵 詞:
c語言 程序設計 教程
 天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:C語言程序設計教程課件第8章.ppt
鏈接地址: http://www.476824.live/p-51617245.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服點擊這里,給天天文庫發消息,QQ:1290478887 - 聯系我們

本站為“文檔C2C交易模式”,即用戶上傳的文檔直接賣給(下載)用戶,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有【成交的100%(原創)】。本站是網絡服務平臺方,若您的權利被侵害,侵權客服QQ:1290478887 歡迎舉報。

[email protected] 2017-2027 http://www.476824.live 網站版權所有

粵ICP備19057495號 

收起
展開
球探网即时蓝球比分 如何短线选股票 极速赛车公式技巧个人经验 广西快乐双彩开奖情况 创业板股票指数怎么买 北京快乐8计划app 股票交易软件 上海快三开奖视频 pk10技巧论坛 在线配资平台_天牛宝 上海十一选五走势图