




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、白 雪 飛中國科學(xué)技術(shù)大學(xué)電子科學(xué)與技術(shù)系Dept. of Elec. Sci. & Tech., USTCFall, 2003l指針概念l指針變量和指針運(yùn)算l指向數(shù)組的指針l指向字符串的指針l指向函數(shù)的指針l前往指針值的函數(shù)l指針數(shù)組和指向指針的指針l指針表示變量等的存儲(chǔ)地址l運(yùn)用指針可以獲得緊湊、高效的代碼l運(yùn)用指針也能夠使程序晦澀難懂l指針的運(yùn)用靈敏方便l指針操作容易出錯(cuò)且難以調(diào)試l指針與數(shù)組關(guān)系親密l地址l經(jīng)過首地址和數(shù)據(jù)類型可以訪問內(nèi)存中某一數(shù)據(jù)l數(shù)據(jù)類型決議所占用存儲(chǔ)單元數(shù)l指針l就是地址l和類型有關(guān)l變量的指針和指針變量l指針變量的定義l地址運(yùn)算符和指針運(yùn)算符l指針變量的
2、援用l指針的運(yùn)算l變量的指針l內(nèi)存中存儲(chǔ)某個(gè)變量的存儲(chǔ)單元的首地址l指針(地址)本質(zhì)上是一個(gè)整數(shù)(不是C的整型)l可以經(jīng)過變量的地址來間接的訪問變量l指針變量l指針(地址)是一個(gè)數(shù)據(jù),也可以用另一個(gè)變量來存放,即指針變量l經(jīng)過指針變量可以間接訪問變量或內(nèi)存數(shù)據(jù)l普通方式l基類型 *指針變量名;l闡明l“基類型表示該指針指向的數(shù)據(jù)的類型l可以定義基類型為空類型void的指針變量l舉例lint *pi;lchar *pc1, c, *pc2;lvoid *p;l地址運(yùn)算符 &l獲得操作數(shù)的地址(指針)l單目運(yùn)算符,自右向左結(jié)合,優(yōu)先級(jí)較高l操作數(shù)應(yīng)為各種類型的內(nèi)存變量、數(shù)組元素、構(gòu)造體成員
3、等l操作數(shù)不能是表達(dá)式、常量、存放器變量l舉例lscanf(%f, &score);lint i, *p=&i;l指針運(yùn)算符 *l獲得指針指向的內(nèi)存數(shù)據(jù)l又稱“間接訪問運(yùn)算符l單目運(yùn)算符,自右向左結(jié)合,優(yōu)先級(jí)較高l操作數(shù)為具有指針(地址)意義的值l舉例lint i, *p=&i;l(*p)+; /* i+; */l指針變量也要“先賦值,后運(yùn)用l沒有賦值的指針變量所存儲(chǔ)的地址數(shù)據(jù)是不確定的,對(duì)它的援用非常危險(xiǎn)l對(duì)指針的賦值要留意類型匹配,必要時(shí)可以運(yùn)用強(qiáng)迫類型轉(zhuǎn)換,但要慎重運(yùn)用l*p可以用于與指針p的基類型一樣類型的變量可以運(yùn)用的任何場所l指針變量可以作為函數(shù)的參數(shù)int
4、 a, b, c, *pa, *pb, *pc;pa = &a;pb = &b;pc = &c;a = 100;printf(*pa=%dn, *pa); /* *pa=100 */*pb = 200;printf(b=%dn, b);/* b=200 */scanf(%d, pc);/* 輸入輸入34 */printf(c=%dn, c);/* c=34 */1020papbabint a, b;int *pa, *pb;pa = &a;pb = &b;*pa = 10;b = 20;pa = pb;pb = &a;&a,&*p
5、a*pa,*&al參數(shù)傳送l依然遵照“單向值傳送的規(guī)那么l這里的傳送規(guī)那么是指針類型參數(shù)的值的傳送l作為參數(shù)的指針型實(shí)參的值不會(huì)改動(dòng)l但是對(duì)指針型實(shí)參所指向的內(nèi)存數(shù)據(jù)所作的操作將不會(huì)隨函數(shù)的前往而恢復(fù)l用途l借助指針類型參數(shù)可以改動(dòng)多個(gè)數(shù)據(jù)的值void swap(int *x, int *y)int t;t=*x, *x=*y, *y=t;void main()int a=1, b=4;int *pa, *pb;pa=&a, pb=&b;swap(pa, pb);&aa&bpb1441bpa&a&byx參數(shù)傳送l運(yùn)算類型l算術(shù)運(yùn)算:加、減
6、、自增、自減l關(guān)系運(yùn)算:一切關(guān)系運(yùn)算l賦值運(yùn)算:普通賦值、加賦值、減賦值l上述運(yùn)算在一定約束條件下才有意義(后詳)l變量闡明lp,q是同類型的指針變量ln是整型變量運(yùn)算方式說 明p+np之后第n個(gè)元素的地址p-np之前第n個(gè)元素的地址p+p作為當(dāng)前操作數(shù),然后后移一個(gè)元素+pp后移一個(gè)元素,然后作為當(dāng)前操作數(shù)p-p作為當(dāng)前操作數(shù),然后前移一個(gè)元素-pp前移一個(gè)元素,然后作為當(dāng)前操作數(shù)p-q表示p和q兩者之間的元素個(gè)數(shù)l條件:p,q是指向同一數(shù)據(jù)集合(數(shù)組)的指針l留意防止數(shù)組越界l條件lp,q是指向同一數(shù)據(jù)集合(數(shù)組)的指針l運(yùn)算方式lpq、p=q、pqlpq) printf(%d, p-q)
7、;else printf(%d, q-p);l指針與數(shù)組的關(guān)系l指向數(shù)組的指針l經(jīng)過指針援用數(shù)組元素l數(shù)組用作函數(shù)參數(shù)l指向二維數(shù)組的指針l數(shù)組名是“常量指針l數(shù)組名表示數(shù)組的首地址,因此數(shù)組名也是一種指針(地址)l數(shù)組名表示的地址(指針)不能被修正,所以稱之為“常量指針l數(shù)組的指針l數(shù)組的起始地址l與數(shù)組名表示的指針一樣l與數(shù)組的第一個(gè)元素(a0)的地址一樣l數(shù)組名不能被賦值和修正,假設(shè)指針指向數(shù)組,那么兩者的其他用法根本一樣l定義指針時(shí),只分配一段用來存放地址的空間,而沒有分配存放數(shù)據(jù)的空間l定義數(shù)組時(shí),為一切元素分配相應(yīng)的延續(xù)的存儲(chǔ)空間,但沒有存放地址的空間l指針應(yīng)賦值后才干運(yùn)用l數(shù)組名
8、不能被賦值,可以直接運(yùn)用pa&a0l當(dāng)一個(gè)指針變量指向數(shù)組或某個(gè)數(shù)組元素時(shí),可以經(jīng)過這個(gè)指針變量援用一切的數(shù)組元素l援用數(shù)組元素的方法l下標(biāo)運(yùn)算符,例如ai、pil指針運(yùn)算符*,例如*(a+i)、*(p+i)l留意數(shù)組名不能被修正和賦值l留意防止下標(biāo)越界p0, *p, *ap, ap+1, a+1p1, *(p+1), *(a+1)q+i-2, p+i, a+ipi, *(p+i), *(a+i)qi-2, *(q+i-2), p+9, a+9p9, *(p+9), *(a+9)q, p+2, a+2p2, *(p+2), *(a+2) q0, *ql指針指向數(shù)組首地址l前提條件:in
9、t a10, *p=a;lai、pi、*(a+i)、*(p+i)等用法都是合法的,且它們都表示同一個(gè)數(shù)組元素la+i(或p+i)不是簡單的在a(或p)表示的地址值上簡單的加i,而是加上i個(gè)基類型所需的地址偏移量,即加上i*sizeof(int)l指針值可以改動(dòng),如p+為下一元素的地址l數(shù)組名的值不能修正,如a+是非法操作l指針指向某個(gè)數(shù)組元素l前提條件:p=a+i;l*(p+)與ai+等價(jià)l*(p-)與ai-等價(jià)l*(+p)與a+i等價(jià)l*(-p)與a-i等價(jià)l留意不能運(yùn)用*(a+)或a=p+i這種方式l留意區(qū)分運(yùn)算順序,*(p+)與(*p)+l留意防止下標(biāo)越界,留意掌握指針位置int a10
10、, i, *p;p = a;/* 指針需求先賦值指針需求先賦值 */while (pa+10) /* 指針在數(shù)組范圍內(nèi)挪動(dòng)指針在數(shù)組范圍內(nèi)挪動(dòng) */ scanf(%d, p+); /* 指針向下挪動(dòng)指針向下挪動(dòng) */p = a;/* 指針指向正確位置指針指向正確位置 */for (i=0; i10; i+) printf(%d, pi); /* 指針運(yùn)用指針運(yùn)用 */l數(shù)組元素用作函數(shù)實(shí)參l與同類型的普通變量用法一樣l數(shù)組用作函數(shù)參數(shù)l數(shù)組類型可以作為函數(shù)參數(shù)類型l數(shù)組可以用作函數(shù)的形參和實(shí)參l定義函數(shù)時(shí),數(shù)組型形參實(shí)踐上作為指針型形參處置,實(shí)參可用一樣類型的數(shù)組或指針l聲明數(shù)組類型形參時(shí),不
11、需求指定數(shù)組長度l普通應(yīng)把數(shù)組長度作為另一個(gè)參數(shù)傳送f(int x, int n) . . main() int a10; . . f(a, 10);l形參用數(shù)組名l實(shí)參用數(shù)組名l形參用指針變量l實(shí)參用數(shù)組名f(int *x, int n) . . main() int a10; . . f(a, 10);l形參用數(shù)組名l實(shí)參用指針變量l形參用指針變量l實(shí)參用指針變量f(int x, int n) . . main() int a10, *p=a; . . f(p, 10);f(int *x, int n) . . main() int a10, *p=a; . . f(p, 10);l選擇排
12、序法void sort(int x, int n) /* int *x */ int i, j, k, t; for (i=0; in-1; i+) k = i; for (j=i+1; jxk) k=j; if (k!=i) t=xi,xi=xk,xk=t; void main() int a10, *p, i; p = a; for (i=0; i10; i+) scanf(%d, p+); p = a; sort(p, 10); /* sort(a, 10); */ for (p=a,i=0; iy?x:y; void main() int (*p)(int, int); /* 定義指針
13、變量定義指針變量 */ int a, b, c; scanf(%d%d, &a, &b); p = max; /* 用函數(shù)名賦值用函數(shù)名賦值 */ c = (*p)(a, b); /* c=max(a,b); */l一元函數(shù)定積分的梯形法數(shù)值求解2)()(2)()(11bfxfafhdxxfhiaxnabhniibaidouble integral(double (*f)(double), double a, double b) double s, h; int n=100, i; h = (b-a)/n; s = (*f)(a)+(*f)(b)/2.0; for(i=1; i
14、n; i+) s += (*f)(a+i*h); return s*h;#include #include void main() double y1, y2, y3; y1 = integral(sin, 0.0, 1.0); y2 = integral(cos, 0.0, 2.0); y3 = integral(exp, 0.0, 3.5); printf(%lfn%lfn%lfn, y1,y2,y3); l函數(shù)的前往值可以是指針類型l定義方式l類型 *函數(shù)名(參數(shù)列表);l舉例lint *foo(int x, int y);l闡明l函數(shù)調(diào)用可以結(jié)合運(yùn)用*和運(yùn)算符l留意與指向函數(shù)的指針區(qū)別
15、lint (*foo)(int x, int y);int *f(int *px, int *py) /* 前往整型指針前往整型指針 */ return *px*py?px:py; /* 較大數(shù)的地址較大數(shù)的地址 */void main() int a=2, b=3, c=9; *f(&a,&b)=c; /* 賦值給賦值給a和和b中較大的數(shù)中較大的數(shù) */ printf(%dn, b); /* 輸出輸出9 */int *f(int *a, int *b) /* 前往整型指針前往整型指針 */ return *a*b?a:b; /* 前往第一個(gè)元素前往第一個(gè)元素 */ /* 較大
16、的數(shù)組地址較大的數(shù)組地址 */void main() int i, a=1,2,3,4, b=5,6,7,8; for (i=0; i4; i+) printf(%dn, f(a,b)i); /* 打印數(shù)組打印數(shù)組b的元素的元素 */l指針數(shù)組l類型 *數(shù)組名長度;l元素是指針類型的數(shù)組l舉例,char *p4;l留意與基類型為數(shù)組的指針區(qū)分lchar (*p)4;l指向指針的指針l基類型為指針類型的指針l舉例,char *p;/* 把一切名字的一切字母全部改成大寫把一切名字的一切字母全部改成大寫 */void main() char *name=Tom, John, Kate; int i,
17、 j; for (i=0; i=a & nameij=z) nameij-=32;/* 利用指向字符指針的指針打印字符串?dāng)?shù)組利用指向字符指針的指針打印字符串?dāng)?shù)組 */void main() char *name=Tom, John, Kate; char *p; int i; p = name; for (i=0; iecho C Languageargc = 3;argv0 = echo;argv1 = C;argv2 = Language;#include int main(int argc, char *argv) while(-argc 0) printf(%s%c, *+argv, (argc1)? :n); return 0;l復(fù)雜類型變量的聲明容易混淆l指針數(shù)組和指向數(shù)組的指針lint *a5; int (*a)5;l指向函數(shù)的指針和前往指針值的函數(shù)lvoid (*f)(); void *f();l過于復(fù)雜的聲明方式使程序晦澀難懂,而且容易出錯(cuò)l可以用typedef關(guān)鍵字把復(fù)雜類型的變量聲明用假設(shè)干個(gè)容易了解的小步驟表示l從標(biāo)識(shí)符開場,逐層分析其意義l按運(yùn)算符優(yōu)先級(jí)和結(jié)合方向的順序進(jìn)展l能夠涉及的運(yùn)算符包括l()自左向右結(jié)合l改動(dòng)結(jié)合順序;或聲明一個(gè)函數(shù),向外一層是函數(shù)前往值類型聲明l自左向右結(jié)合l聲明一個(gè)數(shù)組,向外一層是數(shù)組元素類型聲明l* 自右
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦理資質(zhì)合同范例
- 東莞就業(yè)補(bǔ)貼申請(qǐng)合同范例
- 保鮮冰柜轉(zhuǎn)讓合同范例
- app 建設(shè)合同范例
- 信貸勞務(wù)費(fèi)合同范例
- 人力中介服務(wù)合同范例
- 基于Caffarelli-Silvestre延拓的加權(quán)Lebesgue空間嵌入及容量
- ct移機(jī)合同范例
- 倒土合同范例
- 教育教學(xué)論文-疑問式教學(xué)法
- 《工程熱力學(xué)》(第四版)全冊(cè)配套完整課件
- 和父親斷絕聯(lián)系協(xié)議書范本
- 施工安全的教育培訓(xùn)記錄表
- 5 建立良好的公共秩序《共同建設(shè)有序生活》(第二課時(shí))(教學(xué)設(shè)計(jì))2023-2024學(xué)年統(tǒng)編版道德與法治五年級(jí)下冊(cè)
- 中國新聞事業(yè)史智慧樹知到答案2024年山東大學(xué)
- 形象設(shè)計(jì)師學(xué)習(xí)資料(題庫版)
- Inventor基礎(chǔ)教程與實(shí)戰(zhàn)技能 課件匯 第1-8章 認(rèn)識(shí)Inventor2023-設(shè)計(jì)可視化
- 2024河南中考數(shù)學(xué)專題復(fù) 函數(shù)圖象與系數(shù)的關(guān)系 課件
- 工程機(jī)械設(shè)備綜合保險(xiǎn)
- 記錄食品安全事故處置等保證食品安全的規(guī)章制度
- 獸醫(yī)檢驗(yàn)題庫與答案
評(píng)論
0/150
提交評(píng)論