




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第8章章 指針指針2022年年3月月12日星期六日星期六主要內容主要內容指針基礎指針基礎1指針與數(shù)組指針與數(shù)組2指針與字符串指針與字符串32022年年3月月12日星期六日星期六地址和指針的概念地址和指針的概念v 變量與地址變量與地址2022年年3月月12日星期六日星期六地址和指針的概念地址和指針的概念v 直接訪問與間接訪問直接訪問與間接訪問2022年年3月月12日星期六日星期六2022年年3月月12日星期六日星期六2022年年3月月12日星期六日星期六v 直接訪問和間接訪問直接訪問和間接訪問 這樣在這樣在i_pointer和變量和變量i之間建立起一種聯(lián)系,即通過之間建立起一種聯(lián)系,即通過i_
2、pointer能知道能知道i的地址,從而找到變量的地址,從而找到變量i的內存單元。(的內存單元。(“指向指向”關系)關系)20002000ii33i_pointer320002022年年3月月12日星期六日星期六地址和指針的概念地址和指針的概念v 指針與指針變量指針與指針變量變量變量i的地址,稱為的地址,稱為i的的存放地址的變量存放地址的變量稱為稱為2022年年3月月12日星期六日星期六v變量的變量的指針指針就是變量的就是變量的地址地址。v存放變量的地址的變量是存放變量的地址的變量是指針變量指針變量,用來指向另一個變量。,用來指向另一個變量。v為了表示指針變量和它所指向的變量之間的聯(lián)系,在程序
3、中用為了表示指針變量和它所指向的變量之間的聯(lián)系,在程序中用“* *”符號來表示符號來表示“指向指向”例:例:i_pointer代表指針變量,而代表指針變量,而*i_pointer是是i_pointer所所指向的變量。指向的變量??梢钥吹?,可以看到, *i_pointer也代表一個變量,它和變量也代表一個變量,它和變量i是同一回是同一回事事 (i=3 ; *i_pointer=3;)地址和指針的概念地址和指針的概念2022年年3月月12日星期六日星期六地址和指針的概念地址和指針的概念v & 與與 * 運算符運算符: 取變量或存儲單元的地址取變量或存儲單元的地址i可以是任意類型的變量或存儲
4、單元可以是任意類型的變量或存儲單元: 取指針所指向的單元取指針所指向的單元 i_p只能是地址,或存放地址的變量只能是地址,或存放地址的變量(即指針或指針變量)(即指針或指針變量):指針變量指針變量:i_p所指向的變量(即所指向的變量(即i)2022年年3月月12日星期六日星期六地址和指針的概念地址和指針的概念v & 與與 * 運算符運算符 運算對象的個數(shù):運算對象的個數(shù):1個(單目運算符)個(單目運算符) 優(yōu)先級:第優(yōu)先級:第2級級 結合性:從右到左結合性:從右到左int i, *p;p=&i;下列表達式中錯誤的是下列表達式中錯誤的是&i &p*i *p&
5、;*i *& i &*p *&p&i&p*i*p2022年年3月月12日星期六日星期六指針變量的定義指針變量的定義v 指針定義的一般形式指針定義的一般形式 基類型基類型* * 指針變量名指針變量名; ;說明:說明:v指針變量指針變量p1和和p2只能指向只能指向int變量,但不能指向變量,但不能指向float型或型或char型變量型變量v指針變量定義后,指針變量定義后,2022年年3月月12日星期六日星期六v怎樣使一個指針變量怎樣使一個指針變量指向指向另一個變量呢?另一個變量呢?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);隨機隨機:沒有被賦初值,因此存放隨機地址沒有被賦初值,因此存放隨機地址:可能指向任何地址單元可能指向任何地址單元void main( ) int i=10, ; int *p; ; *p=i; printf(%d, *p);輸出輸出10但是很危險!但是很危險!2022年年3月月12日星期六日星期六 指針指針 變量的地址變量的地址 指針變量指針變量 專門存放指針的變量專門存放指針的變量 如何定義一個指針變量?如何定義一個指針變量? 問題:
8、定義一個指向問題:定義一個指向int型變量的指針變量型變量的指針變量p int * p; 指向指向int型變量的指針型變量的指針int *p; 指向指向float型變量的指針型變量的指針float *p; 指向指向char型變量的指針型變量的指針char *p;復習復習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;賦給指針變量,賦給指針變量,不是賦給目標變量不是賦給目標變量用已初始化指針變量作初值用已初始化指針變量作初值變量必須與定義指針變量時變量必須與定義指針變量時說明的說明的一致一致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日星期六日星期六指針示例指針示例用指針實現(xiàn):輸入兩個數(shù),并使其從大到小輸出用指針實現(xiàn):輸入兩個數(shù),并使其從大到小輸出.5, 9 2022年年3月月12日星期六日星期六指針示例指針示例用指針實現(xiàn):輸入兩個數(shù),并使其從大到小輸出用指針實現(xiàn):輸入兩個數(shù),并使其從大到小輸出.max=9, min=55, 9 a=5, b=92022年年3月月12日星期六日星期六8.2.3指針變量的賦值指針變量的賦值(1)對指針變量的賦值需
11、要保持數(shù)據(jù)類型的一致)對指針變量的賦值需要保持數(shù)據(jù)類型的一致 例如:例如:float x; int *p; p = &x; (2)不能將一個常數(shù)值賦給指針變量)不能將一個常數(shù)值賦給指針變量 例如:例如:int *p; p= 3000; (3)指針變量可以被賦值為)指針變量可以被賦值為NULL或者零或者零 例如:例如:int *p; p= NULL; p = 0;222022年年3月月12日星期六日星期六8.2.3指針變量的賦值指針變量的賦值(4) &取地址運算符取地址運算符 例如:例如:int *p; p=&125; p=&(x+y); (5) 允許使用賦值運算
12、符進行指針的賦值運算允許使用賦值運算符進行指針的賦值運算例如:例如: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)只有變量的地址才能存儲在指針變量中。)只有變量的地址才能存儲在指針變量中。(2)對指針變量的賦值需要保持數(shù)據(jù)類型的一致。)對指針變量的賦值需要保持數(shù)據(jù)類型的一致。(3)不要把變量的值和常數(shù)賦給指針變量。)不要把變量的值和常數(shù)賦給指針變量。(4)指針變量在引用前必須初
13、始化。)指針變量在引用前必須初始化。(5)只有相同類型的指針可以直接賦值)只有相同類型的指針可以直接賦值242022年年3月月12日星期六日星期六指針型函數(shù)指針型函數(shù)v 一個函數(shù)可以返回整型值、字符值、實型值等一個函數(shù)可以返回整型值、字符值、實型值等也可以也可以,即返回地址值,即返回地址值v 函數(shù)的定義形式:函數(shù)的定義形式:例例 其中:其中: f 是函數(shù)名,是函數(shù)名,調用調用f后,會得到一個后,會得到一個“* *”號表明這是一號表明這是一個指針型函數(shù)個指針型函數(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ù)組元素是內存的一個單元,故數(shù)組元素是內存的一個單元,故的性質的性質, ,與與是一樣的。是一樣的。int a10, *p;int a10, *p;int a10;2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 指針變量的賦值運算:指針變量的賦值運算:int *p1, *p2, i, a10;int *p, i;2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 指針變量的算術運算指針變量的算術運算:(當指針變量指向數(shù)組元素時,算術運算才有意義)(當指針變量指向數(shù)組元
16、素時,算術運算才有意義)int i, a10, *p=a;a0a1a2a3a4a5a6a7a8a9數(shù)組數(shù)組a: 就是就是ai的地址的地址也可以用也可以用表示表示即:即:就是數(shù)組元素就是數(shù)組元素ai也把也把*(p+i) 寫作寫作即:即:一定要掌握如下運算:一定要掌握如下運算:2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 指針變量的算術運算指針變量的算術運算:(當指針變量指向數(shù)組元素時,算術運算才有意義)(當指針變量指向數(shù)組元素時,算術運算才有意義)int a10;int *p=&a2;p+;*p=1;a0a1a2a3a4a5a6a7a8a9數(shù)組數(shù)組a2022年年3月月12
17、日星期六日星期六指針與數(shù)組指針與數(shù)組v 指針變量的算術運算指針變量的算術運算:(當指針變量指向數(shù)組元素時,算術運算才有意義)(當指針變量指向數(shù)組元素時,算術運算才有意義)int a10;int *p1=&a2;int *p2=&a5;則:則:a0a1a2a3a4a5a6a7a8a9數(shù)組數(shù)組a若若p1與與p2指向同一數(shù)組指向同一數(shù)組p2-p1=兩指針間元素個數(shù)兩指針間元素個數(shù)(p2的值的值-p1的值的值)/d2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 指針變量的關系運算指針變量的關系運算:(當指針變量指向數(shù)組元素時,關系運算才有意義)(當指針變量指向數(shù)組元素時,
18、關系運算才有意義)int a10;int *p1=&a2;int *p2=&a5;a0a1a2a3a4a5a6a7a8a9數(shù)組數(shù)組a2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 指針變量的關系運算指針變量的關系運算:(當指針變量指向數(shù)組元素時,關系運算才有意義)(當指針變量指向數(shù)組元素時,關系運算才有意義)#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ù)組元素的表示方法:(當指針變量指向數(shù)組元素時,關系運算才有意義)(當指針變量指向數(shù)組元素時,關系運算才有意義)int a10, *p=a; 如何表示如何表示a中第中第i+1個元素個元素(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先計算元素地址,較費時先計算元素地址,較費時用指針變量直接指向元素,執(zhí)行速度快用指針變量直接指向元素,執(zhí)行速度快2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 使用指針變量時要注意的問題使用指針變量時要注意的問題: 指針變量的值可以改變指針變量的值可以改變 數(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 使用指針變量時要注意的問題使用指針變量時要注意的問題: 注意指針變量的當前值注意指針變量的當前值#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、用指針變量時要注意的問題使用指針變量時要注意的問題: 注意指針變量的當前值注意指針變量的當前值#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 使用指針變量時要注意的問題使用指針變量時要注意的問題: 指針變量的復雜運算指針變量的復雜運算#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 使用指針變量時要注意的問題使用指針變量時要注意的問題: 指針變量的復雜運算指針變量的復雜運算#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 使用指針變量時要注意的問題使用指針變量時要注意的問題: 指針變量的復雜運算指針變量的復雜運算#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 使用指針變量時要注意的問題使用指針變量時要注意的問題: 指針變量的復雜運算指針變量的復雜運算#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 總結總結(一維數(shù)組與一級指針的關系)(一維數(shù)組與一級指針的關系) 與與 ;數(shù)組名數(shù)組名 若若p=a,則則p+i是是ai的地址的地址(即(即) 數(shù)組元素的表示方法:下標法數(shù)組元素的表示方法:下標法和和指針法,指針法,若若p=a,則則: 系統(tǒng)只給系統(tǒng)只給p分配能保
26、存一個指針值的內存區(qū)(一般分配能保存一個指針值的內存區(qū)(一般4字節(jié))字節(jié))而給而給a分配分配4*10字節(jié)的內存區(qū)字節(jié)的內存區(qū)2022年年3月月12日星期六日星期六指針與數(shù)組指針與數(shù)組v 用數(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ù)組首地址實際上,實際上,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ù)組的首地址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個元素,每一個元素的地址分別為:個元素,每一個元素的地址分別為: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ù)組看成一個由將二維數(shù)組看成一個由12個元素組成的一維數(shù)組,元素的地址個元素組成的
30、一維數(shù)組,元素的地址為:為:a0+i*4+j或或 *a+i*4+j (i=0,1,2;j=0,1,2,3) 其中:其中:a0和和*a是是12個元素組成的一維數(shù)組名,表示首元素個元素組成的一維數(shù)組名,表示首元素a00的地址。的地址。(3)將二維數(shù)組看成由將二維數(shù)組看成由3個一維數(shù)組組成,元素的地址為:個一維數(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個元素個元素aij地址地址(&
31、;aij)。)。二維數(shù)組元素的地址的各種表示方法二維數(shù)組元素的地址的各種表示方法2022年年3月月12日星期六日星期六有了數(shù)組元素的地址后,用指針運算有了數(shù)組元素的地址后,用指針運算*可以得到相應的數(shù)組元素。即可以得到相應的數(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是每一行中元素的個數(shù)。是每一行中元素的個數(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、們一共會學習三種數(shù)組:我們一共會學習三種數(shù)組:一般數(shù)組、指針數(shù)組、結構體數(shù)組一般數(shù)組、指針數(shù)組、結構體數(shù)組v 指針數(shù)組是指:指針數(shù)組是指:v 定義形式:定義形式:示例:示例:int * p 4區(qū)分區(qū)分 與與 int *p4:定義了一個指針數(shù)組,定義了一個指針數(shù)組, 每個數(shù)組元素都是一個指向整型數(shù)據(jù)的指針每個數(shù)組元素都是一個指向整型數(shù)據(jù)的指針int (*p) 4:定義了一個指針變量定義了一個指針變量 該指針變量指向一個長度為該指針變量指向一個長度為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,每個元素分別指向一個字符串每個元素分別指向一個字符串v 按照字典順序,選擇出最小的字符串所對應的指針按照字典順序,選擇出最小的字符串所對應的指針namek將其與將其與name0的指向互換,即實現(xiàn)了使的指向互
36、換,即實現(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ù)組與指針: 教材上介紹了教材上介紹了的使用,自學,不作要求的使用,自學,不作要求 若要用指針處理二維數(shù)組,要求能夠若要用指針處理二維數(shù)組,要求能夠即:將二維數(shù)組看作一維數(shù)組,用一級指針即:將二維數(shù)組看作一維數(shù)組,用一級指針* *p p實現(xiàn)實現(xiàn)2022年年3月月12日星期六日星
38、期六小結小結定義定義含含 義義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 字符串的處理:字符串的處理:用用實現(xiàn)實現(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 字符串的處理:字符串的處理:用用實現(xiàn)實現(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、總結總結(字符指針變量與字符數(shù)組的比較)(字符指針變量與字符數(shù)組的比較) 與與 ,每個元素存放一個字符,每個元素存放一個字符,存放字符串的首地址,存放字符串的首地址2022年年3月月12日星期六日星期六指針與字符串指針與字符串v 總結總結(字符指針變量與字符數(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 總結總結(字符指針變量與字符數(shù)組的比較)(字符指針變量與字符數(shù)組的比較) 與與 定義字符數(shù)組定義字符數(shù)組 str 時,為它分配了存儲空間,時,為它分配了存儲空間, 在定義字符指針變量在定義字符指針變量 cp 時,分配了時,分配了cp所在的內存單元,所在的內存單元,但是并未對其賦初始地址值,但是并未對其賦初始地址值, char ; scanf (%s, str); char ; scanf (%s, cp); char , ; ; scanf (%s, cp);2022年年3月月12日星期六日星期六例例1:統(tǒng)計輸入字符串的長度。:統(tǒ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結束結束連接后,字符串連接后,字符串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必須足夠大必須足夠大 拷貝時,拷貝時,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對兩串從左向右逐個字符比較(對兩串從左向右逐個字符比較(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.字符串長度函數(shù)字符串長度函數(shù)計算字符串長度計算字符串長度例例 對于以下字符串,對于以下字符串,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() ,編程實現(xiàn),編程實現(xiàn):求一個字符串的長度:求一個字符串的長度定義一個一維字符數(shù)組定義一個一維字符數(shù)組s100輸入一個字符串輸入一個字符串求求第一個第一個0前的字符個數(shù)前的字符個數(shù),即字符串長度,即字符串長度輸出字符串的長度輸出字符串的長度#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() ,編程實現(xiàn),編程實現(xiàn):連接兩個字符串:連接兩
50、個字符串定義兩個一維字符數(shù)組定義兩個一維字符數(shù)組a100, b50輸入這兩個字符串輸入這兩個字符串從字符數(shù)組從字符數(shù)組a的第一個的第一個0開始,開始,將字符數(shù)組將字符數(shù)組b中中0之前的字符一一復制之前的字符一一復制輸出字符串輸出字符串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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年解除終止勞動合同證明書模板8號
- 三年級上冊數(shù)學教案-第七單元第1課時 認識周長-西師大版
- 五年級上冊數(shù)學教案 - 平行四邊形的面積 北師大版
- 譯林版(三起)三年級上冊期中檢測英語試卷(含解析)
- 第一單元第2課《小小工程師》教學設計-2024-2025學年科學新蘇教版一年級上冊
- 蘇教版數(shù)學三年級上冊單元測試卷-第二單元-千克和克(含答案)-
- 人教版三年級上冊期末模擬考試數(shù)學試卷(二)
- 《行軍九日思長安故園》歷年中考古詩欣賞試題匯編(截至2024年)
- 第8單元 26 我的“長生果”名師版2024-2025學年五年級語文上冊同步教學設計(統(tǒng)編版)
- 2024年陶瓷制零件相關陶瓷制品項目資金籌措計劃書
- 社會企業(yè)參與養(yǎng)老服務的模式與效果
- 2025年執(zhí)業(yè)醫(yī)師定期考核題庫及參考答案
- 2025年北京交通職業(yè)技術學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 心理健康七個一主題活動方案
- 多元化票務系統(tǒng)設計-深度研究
- 2024年菏澤職業(yè)學院高職單招語文歷年參考題庫含答案解析
- GB/T 22180-2024速凍裹衣魚
- 《公路施工組織設計》課件
- 人教版地理七年級下冊7.1.1 亞洲的自然環(huán)境(課件33張)
- 中醫(yī)藥防疫課件
- 統(tǒng)編版(2024新版)七年級下冊歷史教材習題答案
評論
0/150
提交評論