第8章 指針_第1頁(yè)
第8章 指針_第2頁(yè)
第8章 指針_第3頁(yè)
第8章 指針_第4頁(yè)
第8章 指針_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第8章章 指針指針2022年年3月月12日星期六日星期六主要內(nèi)容主要內(nèi)容指針基礎(chǔ)指針基礎(chǔ)1指針與數(shù)組指針與數(shù)組2指針與字符串指針與字符串32022年年3月月12日星期六日星期六地址和指針的概念地址和指針的概念v 變量與地址變量與地址2022年年3月月12日星期六日星期六地址和指針的概念地址和指針的概念v 直接訪問(wèn)與間接訪問(wèn)直接訪問(wèn)與間接訪問(wèn)2022年年3月月12日星期六日星期六2022年年3月月12日星期六日星期六2022年年3月月12日星期六日星期六v 直接訪問(wèn)和間接訪問(wèn)直接訪問(wèn)和間接訪問(wèn) 這樣在這樣在i_pointer和變量和變量i之間建立起一種聯(lián)系,即通過(guò)之間建立起一種聯(lián)系,即通過(guò)i_

2、pointer能知道能知道i的地址,從而找到變量的地址,從而找到變量i的內(nèi)存單元。(的內(nèi)存單元。(“指向指向”關(guān)系)關(guān)系)20002000ii33i_pointer320002022年年3月月12日星期六日星期六地址和指針的概念地址和指針的概念v 指針與指針變量指針與指針變量變量變量i的地址,稱為的地址,稱為i的的存放地址的變量存放地址的變量稱為稱為2022年年3月月12日星期六日星期六v變量的變量的指針指針就是變量的就是變量的地址地址。v存放變量的地址的變量是存放變量的地址的變量是指針變量指針變量,用來(lái)指向另一個(gè)變量。,用來(lái)指向另一個(gè)變量。v為了表示指針變量和它所指向的變量之間的聯(lián)系,在程序

3、中用為了表示指針變量和它所指向的變量之間的聯(lián)系,在程序中用“* *”符號(hào)來(lái)表示符號(hào)來(lái)表示“指向指向”例:例:i_pointer代表指針變量,而代表指針變量,而*i_pointer是是i_pointer所所指向的變量。指向的變量??梢钥吹剑梢钥吹?, *i_pointer也代表一個(gè)變量,它和變量也代表一個(gè)變量,它和變量i是同一回是同一回事事 (i=3 ; *i_pointer=3;)地址和指針的概念地址和指針的概念2022年年3月月12日星期六日星期六地址和指針的概念地址和指針的概念v & 與與 * 運(yùn)算符運(yùn)算符: 取變量或存儲(chǔ)單元的地址取變量或存儲(chǔ)單元的地址i可以是任意類型的變量或存儲(chǔ)

4、單元可以是任意類型的變量或存儲(chǔ)單元: 取指針?biāo)赶虻膯卧≈羔標(biāo)赶虻膯卧?i_p只能是地址,或存放地址的變量只能是地址,或存放地址的變量(即指針或指針變量)(即指針或指針變量):指針變量指針變量:i_p所指向的變量(即所指向的變量(即i)2022年年3月月12日星期六日星期六地址和指針的概念地址和指針的概念v & 與與 * 運(yùn)算符運(yùn)算符 運(yùn)算對(duì)象的個(gè)數(shù):運(yùn)算對(duì)象的個(gè)數(shù):1個(gè)(單目運(yùn)算符)個(gè)(單目運(yùn)算符) 優(yōu)先級(jí):第優(yōu)先級(jí):第2級(jí)級(jí) 結(jié)合性:從右到左結(jié)合性:從右到左int i, *p;p=&i;下列表達(dá)式中錯(cuò)誤的是下列表達(dá)式中錯(cuò)誤的是&i &p*i *p&

5、;*i *& i &*p *&p&i&p*i*p2022年年3月月12日星期六日星期六指針變量的定義指針變量的定義v 指針定義的一般形式指針定義的一般形式 基類型基類型* * 指針變量名指針變量名; ;說(shuō)明:說(shuō)明:v指針變量指針變量p1和和p2只能指向只能指向int變量,但不能指向變量,但不能指向float型或型或char型變量型變量v指針變量定義后,指針變量定義后,2022年年3月月12日星期六日星期六v怎樣使一個(gè)指針變量怎樣使一個(gè)指針變量指向指向另一個(gè)變量呢?另一個(gè)變量呢?int i,j;int * pointer_1,*pointer_2;poin

6、ter_1=&i; pointer_2=&j;指針變量的定義指針變量的定義2022年年3月月12日星期六日星期六v理解指針變量的定義:理解指針變量的定義: *pointer_1和和*pointer_2是整型變量,如同是整型變量,如同“int a,b;”是定義是定義了了a和和b是整型變量一樣。是整型變量一樣。 *pointer_1 、*pointer_2是什么?是什么? pointer_1、 pointer_2是什么?是什么? 注意:注意:只有整型變量的地址才能放到指向整型變量的指針變量只有整型變量的地址才能放到指向整型變量的指針變量中。中。指針變量的定義指針變量的定義2022年

7、年3月月12日星期六日星期六指針變量的定義指針變量的定義void main( ) int i=10; int *p; *p=i; printf(%d, *p);隨機(jī)隨機(jī):沒(méi)有被賦初值,因此存放隨機(jī)地址沒(méi)有被賦初值,因此存放隨機(jī)地址:可能指向任何地址單元可能指向任何地址單元void main( ) int i=10, ; int *p; ; *p=i; printf(%d, *p);輸出輸出10但是很危險(xiǎn)!但是很危險(xiǎn)!2022年年3月月12日星期六日星期六 指針指針 變量的地址變量的地址 指針變量指針變量 專門存放指針的變量專門存放指針的變量 如何定義一個(gè)指針變量?如何定義一個(gè)指針變量? 問(wèn)題:

8、定義一個(gè)指向問(wèn)題:定義一個(gè)指向int型變量的指針變量型變量的指針變量p int * p; 指向指向int型變量的指針型變量的指針int *p; 指向指向float型變量的指針型變量的指針float *p; 指向指向char型變量的指針型變量的指針char *p;復(fù)習(xí)復(fù)習(xí)2022年年3月月12日星期六日星期六指針變量的初始化指針變量的初始化v 一般形式:一般形式: 基類型基類型* * 指針變量名指針變量名 = = 初始地址值初始地址值; ;int i;int *p = &i;int *p = &i;int i;float i;int *p = &i;int i;int *

9、p = &i;int *q = p;賦給指針變量,賦給指針變量,不是賦給目標(biāo)變量不是賦給目標(biāo)變量用已初始化指針變量作初值用已初始化指針變量作初值變量必須與定義指針變量時(shí)變量必須與定義指針變量時(shí)說(shuō)明的說(shuō)明的一致一致2022年年3月月12日星期六日星期六指針變量的引用指針變量的引用#include void main() int a,b; int *pointer_1,*pointer_2; a=100;b=10; pointer_1=&a; pointer_2=&b; printf(“%d,%dn”,a,b); printf(“%d,%dn”, *pointer_1, *

10、pointer_2);2022年年3月月12日星期六日星期六指針示例指針示例a: 10&a: ffccp: ffcc*p: 10&p: ffd22022年年3月月12日星期六日星期六指針示例指針示例用指針實(shí)現(xiàn):輸入兩個(gè)數(shù),并使其從大到小輸出用指針實(shí)現(xiàn):輸入兩個(gè)數(shù),并使其從大到小輸出.5, 9 2022年年3月月12日星期六日星期六指針示例指針示例用指針實(shí)現(xiàn):輸入兩個(gè)數(shù),并使其從大到小輸出用指針實(shí)現(xiàn):輸入兩個(gè)數(shù),并使其從大到小輸出.max=9, min=55, 9 a=5, b=92022年年3月月12日星期六日星期六8.2.3指針變量的賦值指針變量的賦值(1)對(duì)指針變量的賦值需

11、要保持?jǐn)?shù)據(jù)類型的一致)對(duì)指針變量的賦值需要保持?jǐn)?shù)據(jù)類型的一致 例如:例如:float x; int *p; p = &x; (2)不能將一個(gè)常數(shù)值賦給指針變量)不能將一個(gè)常數(shù)值賦給指針變量 例如:例如:int *p; p= 3000; (3)指針變量可以被賦值為)指針變量可以被賦值為NULL或者零或者零 例如:例如:int *p; p= NULL; p = 0;222022年年3月月12日星期六日星期六8.2.3指針變量的賦值指針變量的賦值(4) &取地址運(yùn)算符取地址運(yùn)算符 例如:例如:int *p; p=&125; p=&(x+y); (5) 允許使用賦值運(yùn)算

12、符進(jìn)行指針的賦值運(yùn)算允許使用賦值運(yùn)算符進(jìn)行指針的賦值運(yùn)算例如:例如:int *p,*q,x=5; p=&x; q=p;但但 int *p, x=5; float *q; p=&x; q=p; 232022年年3月月12日星期六日星期六8.2.3指針變量的賦值指針變量的賦值指針變量的操作規(guī)則:指針變量的操作規(guī)則:(1)只有變量的地址才能存儲(chǔ)在指針變量中。)只有變量的地址才能存儲(chǔ)在指針變量中。(2)對(duì)指針變量的賦值需要保持?jǐn)?shù)據(jù)類型的一致。)對(duì)指針變量的賦值需要保持?jǐn)?shù)據(jù)類型的一致。(3)不要把變量的值和常數(shù)賦給指針變量。)不要把變量的值和常數(shù)賦給指針變量。(4)指針變量在引用前必須初

13、始化。)指針變量在引用前必須初始化。(5)只有相同類型的指針可以直接賦值)只有相同類型的指針可以直接賦值242022年年3月月12日星期六日星期六指針型函數(shù)指針型函數(shù)v 一個(gè)函數(shù)可以返回整型值、字符值、實(shí)型值等一個(gè)函數(shù)可以返回整型值、字符值、實(shí)型值等也可以也可以,即返回地址值,即返回地址值v 函數(shù)的定義形式:函數(shù)的定義形式:例例 其中:其中: f 是函數(shù)名,是函數(shù)名,調(diào)用調(diào)用f后,會(huì)得到一個(gè)后,會(huì)得到一個(gè)“* *”號(hào)表明這是一號(hào)表明這是一個(gè)指針型函數(shù)個(gè)指針型函數(shù)表示了返回的指針值所指表示了返回的指針值所指向單元的數(shù)據(jù)類型。向單元的數(shù)據(jù)類型。2022年年3月月12日星期六日星期六指針型函數(shù)指針型

14、函數(shù)void main() int a=2, b=3, *p; p = ; printf (%dn, *p);2022年年3月月12日星期六日星期六指針型函數(shù)指針型函數(shù)void main() int a=2, b=3, *p; p = ; printf (%dn, *p);32022年年3月月12日星期六日星期六指針型函數(shù)指針型函數(shù)void main() int a=2, b=3, *p; p = ; printf (%dn, *p);2022年年3月月12日星期六日星期六指針型函數(shù)指針型函數(shù)void main() int a=2, b=3, *p; p = ; printf (%dn, *p

15、);2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 指向數(shù)組元素的指針:指向數(shù)組元素的指針:數(shù)組元素是內(nèi)存的一個(gè)單元,故數(shù)組元素是內(nèi)存的一個(gè)單元,故的性質(zhì)的性質(zhì), ,與與是一樣的。是一樣的。int a10, *p;int a10, *p;int a10;2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 指針變量的賦值運(yùn)算:指針變量的賦值運(yùn)算:int *p1, *p2, i, a10;int *p, i;2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 指針變量的算術(shù)運(yùn)算指針變量的算術(shù)運(yùn)算:(當(dāng)指針變量指向數(shù)組元素時(shí),算術(shù)運(yùn)算才有意義)(當(dāng)指針變量指向數(shù)組元

16、素時(shí),算術(shù)運(yùn)算才有意義)int i, a10, *p=a;a0a1a2a3a4a5a6a7a8a9數(shù)組數(shù)組a: 就是就是ai的地址的地址也可以用也可以用表示表示即:即:就是數(shù)組元素就是數(shù)組元素ai也把也把*(p+i) 寫作寫作即:即:一定要掌握如下運(yùn)算:一定要掌握如下運(yùn)算:2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 指針變量的算術(shù)運(yùn)算指針變量的算術(shù)運(yùn)算:(當(dāng)指針變量指向數(shù)組元素時(shí),算術(shù)運(yùn)算才有意義)(當(dāng)指針變量指向數(shù)組元素時(shí),算術(shù)運(yùn)算才有意義)int a10;int *p=&a2;p+;*p=1;a0a1a2a3a4a5a6a7a8a9數(shù)組數(shù)組a2022年年3月月12

17、日星期六日星期六指針與數(shù)組指針與數(shù)組v 指針變量的算術(shù)運(yùn)算指針變量的算術(shù)運(yùn)算:(當(dāng)指針變量指向數(shù)組元素時(shí),算術(shù)運(yùn)算才有意義)(當(dāng)指針變量指向數(shù)組元素時(shí),算術(shù)運(yùn)算才有意義)int a10;int *p1=&a2;int *p2=&a5;則:則:a0a1a2a3a4a5a6a7a8a9數(shù)組數(shù)組a若若p1與與p2指向同一數(shù)組指向同一數(shù)組p2-p1=兩指針間元素個(gè)數(shù)兩指針間元素個(gè)數(shù)(p2的值的值-p1的值的值)/d2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 指針變量的關(guān)系運(yùn)算指針變量的關(guān)系運(yùn)算:(當(dāng)指針變量指向數(shù)組元素時(shí),關(guān)系運(yùn)算才有意義)(當(dāng)指針變量指向數(shù)組元素時(shí),

18、關(guān)系運(yùn)算才有意義)int a10;int *p1=&a2;int *p2=&a5;a0a1a2a3a4a5a6a7a8a9數(shù)組數(shù)組a2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 指針變量的關(guān)系運(yùn)算指針變量的關(guān)系運(yùn)算:(當(dāng)指針變量指向數(shù)組元素時(shí),關(guān)系運(yùn)算才有意義)(當(dāng)指針變量指向數(shù)組元素時(shí),關(guān)系運(yùn)算才有意義)#include void main() int a10; int *p1=&a2; int *p2=&a5; printf(p1p2: %dn, p1p2: %dn, p1p2); printf(p1=p2: %dn,p1=p2);a0a1a

19、2a3a4a5a6a7a8a9數(shù)組數(shù)組ap1p2: 0p1=p2: 02022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 數(shù)組元素的表示方法數(shù)組元素的表示方法:(當(dāng)指針變量指向數(shù)組元素時(shí),關(guān)系運(yùn)算才有意義)(當(dāng)指針變量指向數(shù)組元素時(shí),關(guān)系運(yùn)算才有意義)int a10, *p=a; 如何表示如何表示a中第中第i+1個(gè)元素個(gè)元素(ai)?2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組a0 a1 a2 a3 a4a0: 1a1: 2 a2: 3 a3: 4a4: 5p0: 1p1: 2 p2: 3 p3: 4p4: 5*(a+0): 1*(a+1): 2 *(a+2): 3 *

20、(a+3): 4*(a+4): 5*(p+0): 1*(p+1): 2 *(p+2): 3 *(p+3): 4*(p+4): 5*p: 1*p: 2 *p: 3 *p: 4*p: 5先計(jì)算元素地址,較費(fèi)時(shí)先計(jì)算元素地址,較費(fèi)時(shí)用指針變量直接指向元素,執(zhí)行速度快用指針變量直接指向元素,執(zhí)行速度快2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 使用指針變量時(shí)要注意的問(wèn)題使用指針變量時(shí)要注意的問(wèn)題: 指針變量的值可以改變指針變量的值可以改變 數(shù)組名的值是地址常量,不可改變數(shù)組名的值是地址常量,不可改變int a=1, 2, 3, 4, 5, *p=a, i=3;的正確表示是:的正確表示

21、是:(A)&(a+1) (B)a+ (C)&p (D)&pip+, p- a+, a- a+1, *(a+2) 2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 使用指針變量時(shí)要注意的問(wèn)題使用指針變量時(shí)要注意的問(wèn)題: 注意指針變量的當(dāng)前值注意指針變量的當(dāng)前值#include void main() int i, a5, *p; p = a; 43210-30-32149160-28239219804128521337p p p p p 1 2 3 4 5 -28 0 14916 32 -30p 2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 使

22、用指針變量時(shí)要注意的問(wèn)題使用指針變量時(shí)要注意的問(wèn)題: 注意指針變量的當(dāng)前值注意指針變量的當(dāng)前值#include void main() int i, a5, *p; p = a; p p p p p 1 2 3 4 5 1 2 3 4 5p p 43210-30-32149160-282392198041285213372022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 使用指針變量時(shí)要注意的問(wèn)題使用指針變量時(shí)要注意的問(wèn)題: 指針變量的復(fù)雜運(yùn)算指針變量的復(fù)雜運(yùn)算#include void main() int a=1,2,3,4,5,6,7,8,9,10; int y, *p=&am

23、p;a1; printf(y=%dn,y); printf(a%d=%d, p-a, ap-a);p y=3a2=3p 9876543210109876543212022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 使用指針變量時(shí)要注意的問(wèn)題使用指針變量時(shí)要注意的問(wèn)題: 指針變量的復(fù)雜運(yùn)算指針變量的復(fù)雜運(yùn)算#include void main() int a=1,2,3,4,5,6,7,8,9,10; int y, *p=&a1; printf(y=%dn,y); printf(a%d=%d, p-a, ap-a);p y=2a2=3p 98765432101098765432

24、12022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 使用指針變量時(shí)要注意的問(wèn)題使用指針變量時(shí)要注意的問(wèn)題: 指針變量的復(fù)雜運(yùn)算指針變量的復(fù)雜運(yùn)算#include void main() int a=1,2,3,4,5,6,7,8,9,10; int y, *p=&a1; printf(y=%dn,y); printf(a%d=%d, p-a, ap-a);y=2a1=3p 9876543210109876543212022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 使用指針變量時(shí)要注意的問(wèn)題使用指針變量時(shí)要注意的問(wèn)題: 指針變量的復(fù)雜運(yùn)算指針變量的復(fù)雜運(yùn)算#inc

25、lude void main() int a=1,2,3,4,5,6,7,8,9,10; int y, *p=&a1; printf(y=%dn,y); printf(a%d=%d, p-a, ap-a);y=1a0=2p 987654321010987654321p 2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 總結(jié)總結(jié)(一維數(shù)組與一級(jí)指針的關(guān)系)(一維數(shù)組與一級(jí)指針的關(guān)系) 與與 ;數(shù)組名數(shù)組名 若若p=a,則則p+i是是ai的地址的地址(即(即) 數(shù)組元素的表示方法:下標(biāo)法數(shù)組元素的表示方法:下標(biāo)法和和指針?lè)?,指針?lè)?,若若p=a,則則: 系統(tǒng)只給系統(tǒng)只給p分配能保

26、存一個(gè)指針值的內(nèi)存區(qū)(一般分配能保存一個(gè)指針值的內(nèi)存區(qū)(一般4字節(jié))字節(jié))而給而給a分配分配4*10字節(jié)的內(nèi)存區(qū)字節(jié)的內(nèi)存區(qū)2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 用數(shù)組名作函數(shù)參數(shù)用數(shù)組名作函數(shù)參數(shù):實(shí)際上,實(shí)際上,main() int arr10, i; f (arr, 10);main() int arr10, i; f (arr, 10);2022年年3月月12日星期六日星期六a數(shù)組數(shù)組1a02a13a24a35a46a57a68a79a810a9指針與數(shù)組指針與數(shù)組v 用數(shù)組名作函數(shù)參數(shù)用數(shù)組名作函數(shù)參數(shù):#include void main() int i,

27、j, a10=1,2,3,4,5,6,7,8,9,10; int m=10/2, temp; for(i=0; im; i+) j=9-i; temp=ai; ai=aj; aj=temp; for(i=0;i10;i+) printf(%d ,ai); printf(n);void main() int i, j, a10=1,2,3,4,5,6,7,8,9,10; ; for(i=0;i10;i+) printf(%d ,ai); printf(n);形參數(shù)組名接收實(shí)參傳遞的形參數(shù)組名接收實(shí)參傳遞的數(shù)組首地址數(shù)組首地址實(shí)際上,實(shí)際上,void main() int i, j, a10=1,

28、2,3,4,5,6,7,8,9,10; ; for(i=0;i10;i+) printf(%d ,ai); printf(n);實(shí)參數(shù)組名代表數(shù)組的首地址實(shí)參數(shù)組名代表數(shù)組的首地址2022年年3月月12日星期六日星期六例例 int a34=1,3,5,7,9,11,13,15,17,19,21,23; a0a1a2a2000a+12008a+22032a0 a0+1 a0+2 a0+3二維數(shù)組二維數(shù)組a有有3行,每一行地址分別為:行,每一行地址分別為:2000,2016,2032。二維數(shù)組二維數(shù)組a有有12個(gè)元素,每一個(gè)元素的地址分別為:個(gè)元素,每一個(gè)元素的地址分別為:2000,2004,20

29、08,2012,2016,2020,2024,2032。其中:其中:a00的地址值與的地址值與a的第的第0行地址相同,行地址相同,a10的地址值與的地址值與a的第的第1行地址相同,行地址相同,a20的地址值與的地址值與a的第的第2行地址相同,但它們的意義不同。行地址相同,但它們的意義不同。指針與數(shù)組指針與數(shù)組 1 3 5 7 9 11 13 15 17 19 21 232022年年3月月12日星期六日星期六(1)用變量地址表示:用變量地址表示: &aij (i=0,1,2;j=0,1,2,3)(2)將二維數(shù)組看成一個(gè)由將二維數(shù)組看成一個(gè)由12個(gè)元素組成的一維數(shù)組,元素的地址個(gè)元素組成的

30、一維數(shù)組,元素的地址為:為:a0+i*4+j或或 *a+i*4+j (i=0,1,2;j=0,1,2,3) 其中:其中:a0和和*a是是12個(gè)元素組成的一維數(shù)組名,表示首元素個(gè)元素組成的一維數(shù)組名,表示首元素a00的地址。的地址。(3)將二維數(shù)組看成由將二維數(shù)組看成由3個(gè)一維數(shù)組組成,元素的地址為:個(gè)一維數(shù)組組成,元素的地址為: (*(a+i)+j) (i=0,1,2;j=0,1,2,3) 其中:其中:a+i是第是第i行的地址,行的地址,*(a+i) 是第是第i行的首元素行的首元素ai0地址地址(&ai0), *(a+i)+j是第是第i行的第行的第j個(gè)元素個(gè)元素aij地址地址(&

31、;aij)。)。二維數(shù)組元素的地址的各種表示方法二維數(shù)組元素的地址的各種表示方法2022年年3月月12日星期六日星期六有了數(shù)組元素的地址后,用指針運(yùn)算有了數(shù)組元素的地址后,用指針運(yùn)算*可以得到相應(yīng)的數(shù)組元素。即可以得到相應(yīng)的數(shù)組元素。即二維數(shù)組元素變量二維數(shù)組元素變量aij還可以用以下還可以用以下3種表示方法:種表示方法:(1)*(&aij) i=0,1,2;j=0,1,2,3。(2)*(a0+i*4+j)或或 *(*a+i*4+j) i=0,1,2;j=0,1,2,3。其中:其中:4是每一行中元素的個(gè)數(shù)。是每一行中元素的個(gè)數(shù)。(3)*(*(a+i)+j) i=0,1,2;j=0,1,

32、2,3指針與數(shù)組指針與數(shù)組2022年年3月月12日星期六日星期六#include void main() int *p,k=0; int a34=1,3,5,7, 9,11,13,15, 17,19,21,23; p=&a00; while(k12) printf(“%4d”,*p+); if (+k %4=0) printf(“n”);1 3 5 7 9 11 13 15 17 19 21 23aa2a1a01 3 5 7 1 3 5 7 9 11 13 159 11 13 1517 19 21 2317 19 21 23p2022年年3月月12日星期六日星期六指針數(shù)組指針數(shù)組v 我

33、們一共會(huì)學(xué)習(xí)三種數(shù)組:我們一共會(huì)學(xué)習(xí)三種數(shù)組:一般數(shù)組、指針數(shù)組、結(jié)構(gòu)體數(shù)組一般數(shù)組、指針數(shù)組、結(jié)構(gòu)體數(shù)組v 指針數(shù)組是指:指針數(shù)組是指:v 定義形式:定義形式:示例:示例:int * p 4區(qū)分區(qū)分 與與 int *p4:定義了一個(gè)指針數(shù)組,定義了一個(gè)指針數(shù)組, 每個(gè)數(shù)組元素都是一個(gè)指向整型數(shù)據(jù)的指針每個(gè)數(shù)組元素都是一個(gè)指向整型數(shù)據(jù)的指針int (*p) 4:定義了一個(gè)指針變量定義了一個(gè)指針變量 該指針變量指向一個(gè)長(zhǎng)度為該指針變量指向一個(gè)長(zhǎng)度為4的一維數(shù)組的一維數(shù)組2022年年3月月12日星期六日星期六 p1 p0* p2指針數(shù)組指針數(shù)組v 指針數(shù)組的賦值指針數(shù)組的賦值main() int

34、a23=1,2,3,4,5,6; int ; ; a12 a11 a10 a02 a01 a00654321a23#include void main() int a23=1,2,3,4,5,6; int ; ; 2022年年3月月12日星期六日星期六#include void main() 指針數(shù)組指針數(shù)組v 指針數(shù)組的賦值指針數(shù)組的賦值0nartroF0psiL0cisaBffbaffc2ffc8p3p2p1p0 720ffe21456676fffbaffc2ffc80ffba: Fortranffc2: Lispffc8: Basic0: #include void main() 202

35、2年年3月月12日星期六日星期六指針數(shù)組指針數(shù)組v 二維數(shù)組與指針數(shù)組的區(qū)別二維數(shù)組與指針數(shù)組的區(qū)別gain 0much 0stronger 0point0bye 0 0niag0hcum0regnorts0eyb0tniopname4name3name2name1name02022年年3月月12日星期六日星期六指針數(shù)組指針數(shù)組(選擇排序)(選擇排序)v 定義指針數(shù)組定義指針數(shù)組name5,每個(gè)元素分別指向一個(gè)字符串每個(gè)元素分別指向一個(gè)字符串v 按照字典順序,選擇出最小的字符串所對(duì)應(yīng)的指針按照字典順序,選擇出最小的字符串所對(duì)應(yīng)的指針namek將其與將其與name0的指向互換,即實(shí)現(xiàn)了使的指向互

36、換,即實(shí)現(xiàn)了使name0指向最小的指向最小的字符串字符串v 依次執(zhí)行,分別將依次執(zhí)行,分別將name1指向次小的字符串,指向次小的字符串,name2指向指向再次小的字符串再次小的字符串 v 依次輸出依次輸出name0name4所指向的字符串所指向的字符串2022年年3月月12日星期六日星期六指針數(shù)組指針數(shù)組(選擇排序)(選擇排序)2022年年3月月12日星期六日星期六指針數(shù)組指針數(shù)組(選擇排序)(選擇排序)2022年年3月月12日星期六日星期六指針數(shù)組指針數(shù)組(選擇排序)(選擇排序)2022年年3月月12日星期六日星期六指針數(shù)組指針數(shù)組(選擇排序)(選擇排序)#include void mai

37、n() char *name=Follow me, BASIC, Great Wall, FORTRAN, Computer , *temp; int i, j, k; for (i=0; i5; i+)printf(%sn, namei);2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 二維數(shù)組與指針二維數(shù)組與指針: 教材上介紹了教材上介紹了的使用,自學(xué),不作要求的使用,自學(xué),不作要求 若要用指針處理二維數(shù)組,要求能夠若要用指針處理二維數(shù)組,要求能夠即:將二維數(shù)組看作一維數(shù)組,用一級(jí)指針即:將二維數(shù)組看作一維數(shù)組,用一級(jí)指針* *p p實(shí)現(xiàn)實(shí)現(xiàn)2022年年3月月12日星期六日星

38、期六小結(jié)小結(jié)定義定義含含 義義int i; int *p ;int an; int *pn; int (*p)n;int f();int *f(); int (*p)();int *p; 指針的數(shù)據(jù)類型指針的數(shù)據(jù)類型2022年年3月月12日星期六日星期六指針與字符串指針與字符串v 字符串的處理:字符串的處理:用用實(shí)現(xiàn)實(shí)現(xiàn)#include void main() char =I love China!; printf(%sn, str); printf(%sn, str+7);I love China!China! str13 str12 str11 str10 str9 str8 str7 s

39、tr6 str5 str4 str3 str2 str1 str00!anihCevolI2022年年3月月12日星期六日星期六指針與字符串指針與字符串v 字符串的處理:字符串的處理:用用實(shí)現(xiàn)實(shí)現(xiàn)#include void main() char =I love China!; printf(%sn, str); printf(%sn, str+7);I l o v e China!0I love China!China!2022年年3月月12日星期六日星期六指針與字符串指針與字符串ffc0Hffc1ello0.cp0olleH2022年年3月月12日星期六日星期六指針與字符串指針與字符串v

40、總結(jié)總結(jié)(字符指針變量與字符數(shù)組的比較)(字符指針變量與字符數(shù)組的比較) 與與 ,每個(gè)元素存放一個(gè)字符,每個(gè)元素存放一個(gè)字符,存放字符串的首地址,存放字符串的首地址2022年年3月月12日星期六日星期六指針與字符串指針與字符串v 總結(jié)總結(jié)(字符指針變量與字符數(shù)組的比較)(字符指針變量與字符數(shù)組的比較) 與與 #include void main() char =I love China!; ; printf(%sn, cp);#include void main() char =I love China!; ; printf(%sn, str);2022年年3月月12日星期六日星期六指針與字符

41、串指針與字符串v 總結(jié)總結(jié)(字符指針變量與字符數(shù)組的比較)(字符指針變量與字符數(shù)組的比較) 與與 定義字符數(shù)組定義字符數(shù)組 str 時(shí),為它分配了存儲(chǔ)空間,時(shí),為它分配了存儲(chǔ)空間, 在定義字符指針變量在定義字符指針變量 cp 時(shí),分配了時(shí),分配了cp所在的內(nèi)存單元,所在的內(nèi)存單元,但是并未對(duì)其賦初始地址值,但是并未對(duì)其賦初始地址值, char ; scanf (%s, str); char ; scanf (%s, cp); char , ; ; scanf (%s, cp);2022年年3月月12日星期六日星期六例例1:統(tǒng)計(jì)輸入字符串的長(zhǎng)度。:統(tǒng)計(jì)輸入字符串的長(zhǎng)度。#include void

42、 main( ) char str80,*p; scanf(“%s”,str); p=str;str x y z 0 printf(“The string length:%dn”,p-str);while(*p) p+ ;p指針與字符串指針與字符串ppp2022年年3月月12日星期六日星期六Banana0指針與字符串指針與字符串Pear0fromto0raePa=Pearb=Bananaa=Pearb=Pearvoid main() char a=Pear; char b=Banana; printf(a=%snb=%sn, a, b); ; printf(a=%snb=%sn, a, b);

43、方法方法1:用:用作函數(shù)參數(shù)作函數(shù)參數(shù)2022年年3月月12日星期六日星期六Banana0指針與字符串指針與字符串Pear0fromtofromtofromtotofromfromto0raePa=Pearb=Bananaa=Pearb=Pearvoid main() char a=Pear; char b=Banana; printf(a=%snb=%sn, a, b); ; printf(a=%snb=%sn, a, b);void main() char a=Pear; char b=Banana; printf(a=%snb=%sn, a, b); ; printf(a=%snb=%s

44、n, a, b);void main() char ; char ; printf(a=%snb=%sn, a, b); ; printf(a=%snb=%sn, a, b);方法方法2:用:用作函數(shù)參數(shù)作函數(shù)參數(shù)2022年年3月月12日星期六日星期六常用字符處理函數(shù)常用字符處理函數(shù)3.字符串連接函數(shù)字符串連接函數(shù)把字符串把字符串2連到字符串連到字符串1后面后面字符數(shù)組字符數(shù)組1的首地址的首地址字符數(shù)組字符數(shù)組1必須足夠大必須足夠大連接前,兩字符串均以連接前,兩字符串均以0結(jié)束結(jié)束連接后,字符串連接后,字符串1中的中的0取消,保留字符串取消,保留字符串2的的0void main() char

45、str110=How ;char str25=are;puts(str1);puts(str2); How are are0era0woH0erawoH2022年年3月月12日星期六日星期六常用字符處理函數(shù)常用字符處理函數(shù)4.字符串拷貝函數(shù)字符串拷貝函數(shù)將字符串將字符串2,拷貝到字符串,拷貝到字符串1中去中去字符數(shù)組字符數(shù)組1的首地址的首地址字符數(shù)組字符數(shù)組1必須足夠大必須足夠大 拷貝時(shí),拷貝時(shí),0 一起拷貝一起拷貝 char , str210; ; ; ;2022年年3月月12日星期六日星期六常用字符處理函數(shù)常用字符處理函數(shù)4.字符串拷貝函數(shù)字符串拷貝函數(shù) #include #include

46、 void main() char tc10; char b = , c= C;char t = Turbo; printf(%sn, tc);!9y8G7:6&5(4342$10tc!9y8G7:605o4b3r2u1T0!9y8G706 5o4b3r2u1T0!9y807C6 5o4b3r2u1T0 Turbo C0obruT0C0 bct2022年年3月月12日星期六日星期六常用字符處理函數(shù)常用字符處理函數(shù)5.字符串比較函數(shù)字符串比較函數(shù)比較字符串比較字符串1和和字符串字符串2對(duì)兩串從左向右逐個(gè)字符比較(對(duì)兩串從左向右逐個(gè)字符比較(ASCII碼),碼), 直到遇到直到遇到不同字符

47、不同字符或或0為止為止返回返回int型整數(shù)型整數(shù) (1) 若字符串若字符串1 字符串字符串2,返回,返回 (3) 若字符串若字符串1 = 字符串字符串2,返回,返回,必須用必須用strcmp比較字符串的大小比較字符串的大小: 返回值:返回值:-1(A - B)返回值:返回值:32(a - A)返回值:返回值:67(C - 0 )返回值:返回值:20(u - a)返回值:返回值:-53(0 - 5)2022年年3月月12日星期六日星期六常用字符處理函數(shù)常用字符處理函數(shù)6.字符串長(zhǎng)度函數(shù)字符串長(zhǎng)度函數(shù)計(jì)算字符串長(zhǎng)度計(jì)算字符串長(zhǎng)度例例 對(duì)于以下字符串,對(duì)于以下字符串,strlen(s)的值為:的值為

48、:(1)char s10=A, 0, B, C, 0, D;(2)char s=tb0willn;(3)char s=x69082n; 1(A)3 (tb)1 (i)2022年年3月月12日星期六日星期六字符數(shù)組舉例字符數(shù)組舉例v不使用不使用strlen() ,編程實(shí)現(xiàn),編程實(shí)現(xiàn):求一個(gè)字符串的長(zhǎng)度:求一個(gè)字符串的長(zhǎng)度定義一個(gè)一維字符數(shù)組定義一個(gè)一維字符數(shù)組s100輸入一個(gè)字符串輸入一個(gè)字符串求求第一個(gè)第一個(gè)0前的字符個(gè)數(shù)前的字符個(gè)數(shù),即字符串長(zhǎng)度,即字符串長(zhǎng)度輸出字符串的長(zhǎng)度輸出字符串的長(zhǎng)度#include void main() char s100;int i=0, slen=0;prin

49、tf(Pleas input the string:n);scanf (%s, s);while (si != 0)slen +;i+; printf(The length of string is: %dn, slen); Please input the string:Hello The length of string is 5 Please input the string:How are you? The length of string is 32022年年3月月12日星期六日星期六字符數(shù)組舉例字符數(shù)組舉例v不使用不使用strcat() ,編程實(shí)現(xiàn),編程實(shí)現(xiàn):連接兩個(gè)字符串:連接兩

50、個(gè)字符串定義兩個(gè)一維字符數(shù)組定義兩個(gè)一維字符數(shù)組a100, b50輸入這兩個(gè)字符串輸入這兩個(gè)字符串從字符數(shù)組從字符數(shù)組a的第一個(gè)的第一個(gè)0開(kāi)始,開(kāi)始,將字符數(shù)組將字符數(shù)組b中中0之前的字符一一復(fù)制之前的字符一一復(fù)制輸出字符串輸出字符串a(chǎn)和字符串和字符串b0zyx0dcba0zyxdcba#include void main() char a100, b50;int i=0, j=0;printf(Pleas input 2 string:n);scanf (%s%s, a, b);while (ai != 0) i+; while (bj != 0) ai=bj;i+; j+; (ai+=bj+;)ai=0;printf(a: %snb: %sn, a, b); Please input 2 string:abcd xyz a: abcdxyzb: xyz0zyx0dcba0zyxdcba2022年年3月

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論