C語言程序設(shè)計基礎(chǔ)(第三版)課件 8 指針_第1頁
C語言程序設(shè)計基礎(chǔ)(第三版)課件 8 指針_第2頁
C語言程序設(shè)計基礎(chǔ)(第三版)課件 8 指針_第3頁
C語言程序設(shè)計基礎(chǔ)(第三版)課件 8 指針_第4頁
C語言程序設(shè)計基礎(chǔ)(第三版)課件 8 指針_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

2025/7/14西南交通大學(xué)出版社童華主編8指針指針是C語言中一個重要的數(shù)據(jù)類型常用的指針有:變量的指針、數(shù)組的指針、函數(shù)的指針、指針數(shù)組和多級指針指針支持內(nèi)存的動態(tài)分配,能直接處理內(nèi)存地址,為函數(shù)間各類數(shù)據(jù)的傳遞提供了非常有效的手段利用指針可以直接對內(nèi)存中各種不同的數(shù)據(jù)結(jié)構(gòu)進(jìn)行快速訪問和處理2025/7/14西南交通大學(xué)出版社童華主編能力訓(xùn)練環(huán)節(jié)簡單趣味程序演示:最佳存款方案假設(shè)銀行整存整取存款不同期限的月息利率分別為: 0.63%,期限=1年;0.66%,期限=2年;0.69%,期限=3年;0.75%,期限=5年;0.84%,期限=8年。利息=本金*月息利率*12*存款年限 現(xiàn)在某人手中有2000元錢,請通過計算選擇一種存錢方案,使得錢存入銀行20年后得到的利息最多(假定銀行對超過存款期限的那一部分時間不付利息)2025/7/14西南交通大學(xué)出版社童華主編能力訓(xùn)練環(huán)節(jié)//趣味程序演示代碼#include<stdio.h>#include<math.h>intmain(void){ inti8,i5,i3,i2,i1,n8,n5,n3,n2,n1; floatmax=0,term;system("title最佳存款方案——CProgram");//程序窗口上的標(biāo)題for(i8=0;i8<3;i8++)/*窮舉所有可能的存款方式*/ for(i5=0;i5<=(20-8*i8)/5;i5++) for(i3=0;i3<=(20-8*i8-5*i5)/3;i3++) for(i2=0;i2<=(20-8*i8-5*i5-3*i3)/2;i2++) { i1=20-8*i8-5*i5-3*i3-2*i2; term=2000.0*pow((double)(1+0.0063*12),(double)i1) *pow((double)(1+2*0.0063*12),(double)i2) *pow((double)(1+3*0.0069*12),(double)i3) *pow((double)(1+5*0.0075*12),(double)i5) *pow((double)(1+8*0.0084*12),(double)i8); /*計算到期時的本利合計*/ if(term>max) { max=term;n1=i1;n2=i2;n3=i3;n5=i5;n8=i8; } } printf("Formaxinumprofit,heshouldsosavehismoneyinabank:\n"); printf("madefixeddepositfor8year:%dtimes\n",n8); printf("madefixeddepositfor5year:%dtimes\n",n5); printf("madefixeddepositfor3year:%dtimes\n",n3); printf("madefixeddepositfor2year:%dtimes\n",n2); printf("madefixeddepositfor1year:%dtimes\n",n1); printf("Toal:%.2f\n",max); /*輸出存款方式*/return0;}2025/7/14西南交通大學(xué)出版社童華主編能力訓(xùn)練環(huán)節(jié)趣味程序演示結(jié)果2025/7/14西南交通大學(xué)出版社童華主編任務(wù)8指針數(shù)據(jù)類型應(yīng)用操作訓(xùn)練任務(wù)要求能夠理解和利用指針數(shù)據(jù)類型解決實際問題,并會進(jìn)行編程應(yīng)用的操作會修改、調(diào)試源程序?qū)Α皩W(xué)生成績管理系統(tǒng)”項目任務(wù)中所涉及到的函數(shù),采用指針變量作參數(shù)來實現(xiàn)2025/7/14西南交通大學(xué)出版社童華主編

必備知識環(huán)節(jié)階段性子系統(tǒng)(子程序)引例:學(xué)生成績管理系統(tǒng)中用指針快速訪問內(nèi)存數(shù)據(jù)用指針指向數(shù)組或數(shù)組元素,其訪問速度快,程序執(zhí)行效率高在學(xué)生成績管理系統(tǒng)引例中,定義了一個指向?qū)W生成績數(shù)組首地址的指針變量p,調(diào)用函數(shù)時實參也用指向?qū)W生成績數(shù)組首地址的指針變量p2025/7/14西南交通大學(xué)出版社童華主編

必備知識環(huán)節(jié)#include<stdio.h>intmain(void){ voidinputData(float[],int); /*聲明錄入成績函數(shù)inputData*/ voidsortData(float[],int); /*聲明排序成績函數(shù)sortData*/ voiddisplayData(float[],int); /*聲明顯示成績函數(shù)displayData*/ voidupdateData(float[],int); /*聲明修改成績函數(shù)updateData*/ voidfindData(float[],int); /*聲明查詢成績函數(shù)findData*/ voidcalData(float[],int); /*聲明統(tǒng)計成績函數(shù)calData*/ floatstudent[10],*p=&student[0];/*定義表示學(xué)生成績的數(shù)組,定義指向?qū)W生成績數(shù)組首地址的指針變量p*/ intn=10,menu=0;/*定義學(xué)生的人數(shù)n和菜單項變量menu*/ system("title學(xué)生成績管理系統(tǒng)——

數(shù)組的指針CProgram");//程序窗口上的標(biāo)題

do { printf("\n"); printf("學(xué)生成績管理系統(tǒng)菜單\n"); printf("1.錄入學(xué)生成績\n"); printf("2.排序?qū)W生成績\n"); printf("3.顯示學(xué)生成績\n"); printf("4.修改學(xué)生成績\n"); printf("5.查詢學(xué)生成績\n"); printf("6.統(tǒng)計學(xué)生成績\n"); printf("7.退出系統(tǒng)\n"); printf("請選擇菜單:"); scanf("%d",&menu); switch(menu) { case1: inputData(p,n);/*調(diào)用錄入成績函數(shù),實參用指向?qū)W生成績數(shù)組首地址的指針變量p*/ break; case2: sortData(p,n);/*調(diào)用排序成績函數(shù),實參用指向?qū)W生成績數(shù)組首地址的指針變量p*/ break; case3: displayData(p,n);/*調(diào)用顯示成績函數(shù),實參用指向?qū)W生成績數(shù)組首地址的指針變量p*/ break; case4: updateData(p,n);/*調(diào)用修改成績函數(shù),實參用指向?qū)W生成績數(shù)組首地址的指針變量p*/ break; case5: findData(p,n);/*調(diào)用查詢成績函數(shù),實參用指向?qū)W生成績數(shù)組首地址的指針變量p*/ break; case6:calData(p,n);/*調(diào)用統(tǒng)計成績函數(shù),實參用指向?qū)W生成績數(shù)組首地址的指針變量p*/ break; } } while(menu!=7); return0;}/*定義學(xué)生成績錄入函數(shù)*/voidinputData(floats[],intn)/*形參用學(xué)生成績數(shù)組名,下同*/{ inti; for(i=0;i<n;i++) { printf("輸入第%d個學(xué)生的成績:",i+1); scanf("%f",&s[i]); }}2025/7/14西南交通大學(xué)出版社童華主編

必備知識環(huán)節(jié)程序運(yùn)行結(jié)果2025/7/14西南交通大學(xué)出版社童華主編8.1變量的指針8.1.1指針變量的定義8.1.2指針變量的引用8.1.3指針變量作函數(shù)參數(shù)2025/7/14西南交通大學(xué)出版社童華主編

8.1.1指針變量的定義1.地址和指針的概念地址:標(biāo)識內(nèi)存區(qū)域的一個存儲單元取變量的地址用&運(yùn)算符內(nèi)存單元的地址與內(nèi)存單元的內(nèi)容的區(qū)別 例:i=898&i=0x12ff7c指針:指的就是數(shù)據(jù)在內(nèi)存中的地址內(nèi)容地址2025/7/14西南交通大學(xué)出版社童華主編8.1.1指針變量的定義2.變量的指針和指向變量的指針變量一個變量的訪問方式有兩種:(1)通過變量名直接訪問(2)該變量的指針間接訪問變量的指針就是變量的內(nèi)存地址指針變量指的是存放地址的變量在程序中常用“*”號來定義指針和進(jìn)行取值運(yùn)算

2025/7/14西南交通大學(xué)出版社童華主編8.1.1指針變量的定義3.指針變量的定義指針變量定義的形式: 基類型*指針變量名如: inti,*p; p=&i;指針變量p指向整型變量i,p的值為i的地址值注意:指針變量中只能存放地址,如: p=100;這樣對嗎?指針變量P2025/7/14西南交通大學(xué)出版社童華主編8.1.1指針變量的定義4.指針變量的初始化初始化的一般形式為:

數(shù)據(jù)類型*指針變量名=&變量名;例如:

inta;charc;

int*pa=&a;

char*pc=&c;2025/7/14西南交通大學(xué)出版社童華主編8.1.2指針變量的引用兩個有關(guān)的運(yùn)算符:

&:取地址運(yùn)算符

&變量名

*:指針運(yùn)算符

*指針變量名2025/7/14西南交通大學(xué)出版社童華主編8.1.2指針變量的引用

【例8-1】引用指針變量輸出兩個數(shù)的值。

在開頭處雖然定義了兩個指針變量pointer_1和pointer_2,但它們并未指向任何一個整型變量程序第5、6行的作用就是使pointer_1指向a,pointer_2指向b最后一行的*pointer_1和*pointer_2就是變量a和b2025/7/14西南交通大學(xué)出版社童華主編8.1.3指針變量作函數(shù)參數(shù)

函數(shù)的參數(shù)不僅可以是整型、實型、字符型等數(shù)據(jù),還可以是指針類型作用是將一個變量的地址傳送到另一個函數(shù)中可使指針變量所指向的變量的值能夠隨函數(shù)的改變而改變2025/7/14西南交通大學(xué)出版社童華主編8.2數(shù)組的指針8.2.1一維數(shù)組的指針8.2.2二維數(shù)組的指針8.2.3數(shù)組名和指針變量作函數(shù)參數(shù)2025/7/14西南交通大學(xué)出版社童華主編8.2數(shù)組的指針指針可以指向數(shù)組和數(shù)組元素當(dāng)一個指針指向數(shù)組后,對數(shù)組元素的訪問,既可以使用數(shù)組下標(biāo),也可以使用指針用指針訪問數(shù)組元素,程序的效率更高2025/7/14西南交通大學(xué)出版社童華主編8.2.1一維數(shù)組的指針指向數(shù)組元素的指針變量,其類型應(yīng)與數(shù)組元素相同,如:

對指針變量的賦值為:

inta[10],*p;floatb[20],*pointer;p=&a[0];或p=a;pointer=&b[0];或pointer=b;2025/7/14西南交通大學(xué)出版社童華主編8.2.1一維數(shù)組的指針訪問數(shù)組各元素的方法:1.下標(biāo)法(常用,很直觀) 如a[i]形式2.指針法(常用,效率高) 如*(a+i)或*(p+i)2025/7/14西南交通大學(xué)出版社童華主編8.2.1一維數(shù)組的指針

如果指針p指向數(shù)組a(指向數(shù)組的第一個元素a[0]),則:p+1指向下一個元素a[1]

p+i指向元素a[i]。也可以使用*(p+i)訪問元素a[i]。注意:不是將p值簡單加1。如果數(shù)組元素是整型,p+1表示p的地址加2;如果數(shù)組元素是實型,p+1表示p的地址加4;如果數(shù)組元素是字符型,p+1表示p的地址加12025/7/14西南交通大學(xué)出版社童華主編8.2.1一維數(shù)組的指針p+i也可以記作a+i。指向元素a[i]指向數(shù)組的指針變量也可以帶下標(biāo) 如,p[i]與*(p+i)等價,表示元素a[i]2025/7/14西南交通大學(xué)出版社童華主編8.2.2二維數(shù)組的指針1.指向二維數(shù)組元素的指針例如:

inta[3][4]; int*p; p=a;2025/7/14西南交通大學(xué)出版社童華主編8.2.2二維數(shù)組的指針2.指向二維數(shù)組行的行指針指向二維數(shù)組行的指針,定義為:數(shù)據(jù)類型(*行指針名)[二維數(shù)組列數(shù)n]例如:

inta[3][4]; int(*p)[4]; p=a[0];兩種二維數(shù)組的指針變量的區(qū)別?2025/7/14西南交通大學(xué)出版社童華主編8.2.3數(shù)組名和指針變量作函數(shù)參數(shù)數(shù)組名代表數(shù)組首地址,可以作函數(shù)的實參和形參數(shù)組指針變量的值即為數(shù)組的首地址,也可作為函數(shù)的參數(shù)使用如:

main() {intarray[10];

……

…… f(array,10);

……

…… } f(intarr[],intn); {

……

……

}2025/7/14西南交通大學(xué)出版社童華主編8.2.3數(shù)組名和指針變量作函數(shù)參數(shù)實參和形參有以下四種組合情況實參和形參都為數(shù)組名實參用數(shù)組名,形參用指針變量參和形參都用指針變量實參用指針變量,形參用數(shù)組名2025/7/14西南交通大學(xué)出版社童華主編8.3字符串的指針字符串一般存放在字符數(shù)組中字符數(shù)組名代表字符數(shù)組的首地址,也是存放字符串的起始地址定義字符指針變量sp使之指向一個字符串的首地址,并同時用字符串常量對從字符指針開始的內(nèi)存區(qū)域進(jìn)行初始化2025/7/14西南交通大學(xué)出版社童華主編8.3字符串的指針例如:

charstr[20]="Ilovechina!",*s=str;可用指向字符數(shù)組的指針變量s來操作字符數(shù)組str2025/7/14西南交通大學(xué)出版社童華主編8.4函數(shù)的指針8.4.1指向函數(shù)的指針8.4.2返回指針值的函數(shù)2025/7/14西南交通大學(xué)出版社童華主編8.4函數(shù)的指針8.4.1指向函數(shù)的指針函數(shù)的指針是指向函數(shù)入口地址的指針函數(shù)指針變量的定義形式為:

數(shù)據(jù)類型(*函數(shù)指針變量名)(函數(shù)參數(shù)表列);2025/7/14西南交通大學(xué)出版社童華主編8.4.1指向函數(shù)的指針通過函數(shù)指針變量調(diào)用函數(shù)時,有以下兩種調(diào)用形。(1)指針調(diào)用

(*函數(shù)指針變量名)(實參表)例如:

(*pf)('c',90);2025/7/14西南交通大學(xué)出版社童華主編8.4.1指向函數(shù)的指針(2)函數(shù)名調(diào)用

函數(shù)指針變量名(實參表)例如:

pf('c',90);2025/7/14西南交通大學(xué)出版社童華主編8.4.1指向函數(shù)的指針需要注意,函數(shù)指針變量不能進(jìn)行算術(shù)運(yùn)算,這是與數(shù)組指針變量不同的。2025/7/14西南交通大學(xué)出版社童華主編8.4.1指向函數(shù)的指針例8-11定義函數(shù)指針變量,使用函數(shù)指針變量顯式調(diào)用和隱式調(diào)用兩種形式調(diào)用函數(shù)。測試代碼見書:

函數(shù)運(yùn)行后的結(jié)果是

Thea

溫馨提示

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

評論

0/150

提交評論