版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、2021-9-291 program design in c languagepage第八講第八講第八章第八章 指針指針 指針和指針變量的概念指針和指針變量的概念變量的指針和指向變量的指針變量變量的指針和指向變量的指針變量2021-9-292 program design in c languagepage8.1.1 地址和指針 存儲單元:存放一個字節(jié)數(shù)據(jù)的存儲器。存儲單元:存放一個字節(jié)數(shù)據(jù)的存儲器。存儲單元的內(nèi)容:存儲單元中存放的數(shù)據(jù)。存儲單元的內(nèi)容:存儲單元中存放的數(shù)據(jù)。存儲單元的地址:存儲單元的編號。存儲單元的地址:存儲單元的編號。變量的首地址:變量占據(jù)的連續(xù)存儲單元的起始地變量的首地址
2、:變量占據(jù)的連續(xù)存儲單元的起始地址,簡稱變量的地址。址,簡稱變量的地址。指針:存儲單元的地址,是一個常量。指針:存儲單元的地址,是一個常量。2021-9-293 program design in c languagepage8.1.1 地址和指針 int i;char ch;float f;.用戶數(shù)據(jù)區(qū)內(nèi)存用戶數(shù)據(jù)區(qū)內(nèi)存1000100210031001100410051006i占據(jù)占據(jù)2字節(jié)字節(jié)ch占據(jù)占據(jù)1字節(jié)字節(jié)f占據(jù)占據(jù)4字節(jié)字節(jié)存儲單元的地址(指針)存儲單元的地址(指針)變量(首)地址變量(首)地址i = 1;ch = a;f = 2.5;12.5a存儲單元的內(nèi)容存儲單元的內(nèi)容202
3、1-9-294 program design in c languagepage8.1.2 指針變量 指針變量是專門用來存放內(nèi)存單元地址的特殊變量。指針變量是專門用來存放內(nèi)存單元地址的特殊變量。當(dāng)把某個變量當(dāng)把某個變量i的地址存入指針變量的地址存入指針變量p后,我們就說這后,我們就說這個指針變量個指針變量p指向該變量指向該變量i。指針變量指針變量p10整型變量整型變量i1000指向指向1000i的地址存入的地址存入pint i = 10, *p;p = &i;指針與指針變量的區(qū)別,就是變量值與變量的區(qū)別,指針與指針變量的區(qū)別,就是變量值與變量的區(qū)別,即即指針變量的值是指針指針變量的值是指針。例
4、如,可以說變量。例如,可以說變量i的指針是的指針是1000,但不能說變量,但不能說變量i的指針變量是的指針變量是1000。2021-9-295 program design in c languagepage8.1.2 指針變量 對內(nèi)存單元的訪問有兩種方式:對內(nèi)存單元的訪問有兩種方式:直接訪問:直接根據(jù)變量名存取變量的值。直接訪問:直接根據(jù)變量名存取變量的值。間接訪問:將變量的地址存放在指針變量中,當(dāng)要間接訪問:將變量的地址存放在指針變量中,當(dāng)要對變量進行存取時,首先讀取指針變量的值,得到要對變量進行存取時,首先讀取指針變量的值,得到要存取變量的地址,再對該變量進行訪問。存取變量的地址,再對該
5、變量進行訪問。變量變量i10001020.1000.10.指針變量指針變量p (直接訪問)(直接訪問)(間接訪問)(間接訪問)2021-9-296 program design in c languagepage8.2.1 指針變量的定義 定義格式:定義格式:類型說明符類型說明符 *指針變量名指針變量名;其中類型說明符指的是指針變量所指向變量的數(shù)據(jù)類其中類型說明符指的是指針變量所指向變量的數(shù)據(jù)類型,型, “*”表示隨后的變量是指針變量。表示隨后的變量是指針變量。例如:例如:int *ptr1; char *ptr2; ptr1是指向整型變量的指針變量,專門用來存放整型是指向整型變量的指針變量,
6、專門用來存放整型變量的地址。變量的地址。ptr2是指向字符型變量的指針變量,專門用來存放字是指向字符型變量的指針變量,專門用來存放字符型變量的地址。符型變量的地址。2021-9-297 program design in c languagepage8.2.1 指針變量的定義 說明:說明: 1)指針變量中只能存放地址(指針),不能和整)指針變量中只能存放地址(指針),不能和整型型 變量混淆。例如下面寫法是錯誤的:變量混淆。例如下面寫法是錯誤的: int *ptr1; ptr1 = 1000;指針變量可以取值為指針變量可以取值為0(null),表示該指針變量),表示該指針變量不指向任何變量。不指
7、向任何變量。 2)指針變量只能存放與它數(shù)據(jù)類型相同的變量的)指針變量只能存放與它數(shù)據(jù)類型相同的變量的地址。例如下面寫法是錯誤的:地址。例如下面寫法是錯誤的: int *ptr1; char ch; ptr1 = &ch;2021-9-298 program design in c languagepage8.2.2 指針變量的引用指針變量可以通過一對互逆的運算符進行引用。指針變量可以通過一對互逆的運算符進行引用。取地址運算符取地址運算符“&”作用:返回操作對象的內(nèi)存單元地址。作用:返回操作對象的內(nèi)存單元地址。說明:不能對常量或表達式進行說明:不能對常量或表達式進行“&”運算。運算。例如:例如:
8、 int i, *ptr1; char ch, *ptr2; ptr1 = &i; /*將變量將變量i的地址賦給指針變量的地址賦給指針變量ptr1*/ ptr2 = &ch; /*將變量將變量ch的地址賦給指針變量的地址賦給指針變量ptr2*/2021-9-299 program design in c languagepage8.2.2 指針變量的引用指針運算符指針運算符“*”作用:間接存取指針變量所指向變量的值。作用:間接存取指針變量所指向變量的值。 例如:例如:int i, *ptr1; char ch, *ptr2; ptr1 = &i; ptr2 = &ch; *ptr1 = 100
9、; *ptr2 += 32; 其中:其中:*ptr1 = 100; 等價于等價于 i = 100; *ptr2 += 32; 等價于等價于 ch = ch+32; 2021-9-2910 program design in c languagepage8.2.2 指針變量的引用說明:說明:1)定義語句中的)定義語句中的“*”和執(zhí)行語句中的和執(zhí)行語句中的“*”含義不同,定義含義不同,定義語句中的語句中的“*”說明定義的是一個指針變量,而執(zhí)行語句中的說明定義的是一個指針變量,而執(zhí)行語句中的“*”表示間接存取指針變量所指向變量的值。表示間接存取指針變量所指向變量的值。2)指針變量中必須存放了確定的地
10、址值后才能進行指針運)指針變量中必須存放了確定的地址值后才能進行指針運算。例如下面寫法是錯誤的算。例如下面寫法是錯誤的: int *ptr1; *ptr1 = 10;ptr1中存放的是一個隨機的地址值,該地址有可能是系統(tǒng)程中存放的是一個隨機的地址值,該地址有可能是系統(tǒng)程序已占用存儲單元的地址,將序已占用存儲單元的地址,將10賦值給賦值給ptr1所指向?qū)ο蠛螅赶驅(qū)ο蠛?,原來的?shù)據(jù)被更新,系統(tǒng)有可能遭到很嚴重的破壞。原來的數(shù)據(jù)被更新,系統(tǒng)有可能遭到很嚴重的破壞。2021-9-2911 program design in c languagepage8.2.2 指針變量的引用例例 指針運算符的使
11、用指針運算符的使用#include void main( ) int a=50, *p; p=&a; printf(*p=%d, p=%xn, *p, p); *p=100; printf(a=%d, &a=%xn, a, &a);程序運行結(jié)果:程序運行結(jié)果:*p=50, p=fff4a=100, &a=fff42021-9-2912 program design in c languagepage8.2.3 指針變量的初始化一般格式:一般格式:類型說明符類型說明符 *指針變量名指針變量名 = 初始地址值初始地址值; 例如:例如:int i, *ptr1 = &i; float *ptr2 =
12、 0, *ptr3 = null;說明:說明:1)任何指針變量在使用之前必須初始化,使指針)任何指針變量在使用之前必須初始化,使指針變量指向一個確定的內(nèi)存單元,未經(jīng)初始化的指變量指向一個確定的內(nèi)存單元,未經(jīng)初始化的指針變量禁止使用。針變量禁止使用。2)必須使用同類型變量的地址進行指針變量的初)必須使用同類型變量的地址進行指針變量的初始化。始化。2021-9-2913 program design in c languagepage8.2.4 指針變量的運算實質(zhì):地址的運算實質(zhì):地址的運算類型:類型:指針變量賦值指針變量賦值指針變量加指針變量加/減一個整數(shù)減一個整數(shù)兩個指針變量比較兩個指針變量比
13、較兩個指針變量相減兩個指針變量相減2021-9-2914 program design in c languagepage8.2.4 指針變量的運算1. 指針變量賦值:將已存在對象的地址賦給指針變量指針變量賦值:將已存在對象的地址賦給指針變量例例 交換兩個指針變量所指向變量的值交換兩個指針變量所指向變量的值#include void main( ) int *p1, *p2, x1=10, x2=20, t; p1=&x1; p2=&x2; /*指針變量賦值指針變量賦值*/ printf(*p1=%d, *p2=%dn, *p1, *p2); t=*p1; *p1=*p2; *p2=t; /*
14、 交換指針變量所指向變量的值交換指針變量所指向變量的值*/ printf(*p1=%d, *p2=%dn, *p1, *p2); printf(x1=%d, x2=%dn, x1, x2);程序運行結(jié)果:程序運行結(jié)果:*p1=10, *p2=20*p1=20, *p2=10 x1=20, x2=102021-9-2915 program design in c languagepage8.2.4 指針變量的運算程序運行結(jié)果:程序運行結(jié)果:*p1=10, *p2=20*p1=20, *p2=10 x1=10, x2=20例例 交換兩個指針變量的值交換兩個指針變量的值#include void m
15、ain( ) int *p1, *p2, *t=null, x1=10, x2=20; p1=&x1; p2=&x2; /*指針變量賦值指針變量賦值*/ printf(*p1=%d, *p2=%dn, *p1, *p2); t=p1; p1=p2; p2=t; /* 交換指針變量的值交換指針變量的值*/ printf(*p1=%d, *p2=%dn, *p1, *p2); printf(x1=%d, x2=%dn, x1, x2);2021-9-2916 program design in c languagepage8.2.4 指針變量的運算2. 指針變量加指針變量加/減一個整數(shù):指向另一個
16、存儲單元減一個整數(shù):指向另一個存儲單元例例 移動指針變量訪問數(shù)組元素移動指針變量訪問數(shù)組元素#include void main( ) int a10=1, 3, 5, 7, 9, 11, 13, 15, 17, 19; int n=6, *p1, *p2; p1=p2=&a0; printf(1) *p1=%d, *p2=%dn, *p1, *p2); p1=p1+n; p2+; /*指針變量加指針變量加/減一個整數(shù)減一個整數(shù)*/ printf(2) *p1=%d, *p2=%dn, *p1, *p2); +p1; p1=p1-3; p2=p2+7; printf(3) *p1=%d, *p
17、2=%dn, *p1, *p2); 程序運行結(jié)果:程序運行結(jié)果:1) *p1=1, *p2=12) *p1=13, *p2=33) *p1=9, *p2=172021-9-2917 program design in c languagepage8.2.4 指針變量的運算3. 兩個指針變量比較:對兩個指針變量中存放的地址進行比較兩個指針變量比較:對兩個指針變量中存放的地址進行比較例例 比較指針變量逆序數(shù)組元素比較指針變量逆序數(shù)組元素#include void main( ) int a10=1, 3, 5, 7, 9, 11, 13, 15, 17, 19; int *p1=&a0, *p2=
18、&a9, t; while(p1p2) /*兩個指針變量比較兩個指針變量比較*/ t=*p1; *p1=*p2; *p2=t; p1+; p2-; for(t=0; t10; t+) printf(a%d=%dn, t, at); 程序運行結(jié)果:程序運行結(jié)果:a0=19a1=17a2=15a9=1指針變量的比較運算經(jīng)常用于數(shù)組,判定兩個指針變量所指指針變量的比較運算經(jīng)常用于數(shù)組,判定兩個指針變量所指向的數(shù)組元素的位置先后。向的數(shù)組元素的位置先后。2021-9-2918 program design in c languagepage8.2.4 指針變量的運算4. 兩個指針變量相減:當(dāng)兩個指針變
19、量指向同一數(shù)組中的不同兩個指針變量相減:當(dāng)兩個指針變量指向同一數(shù)組中的不同數(shù)組元素時,指針變量相減的差值即為兩個指針變量相隔的元數(shù)組元素時,指針變量相減的差值即為兩個指針變量相隔的元素個數(shù)。素個數(shù)。例例 相減指針變量逆序數(shù)組元素相減指針變量逆序數(shù)組元素#include void main( ) int a10=1, 3, 5, 7, 9, 11, 13, 15, 17, 19; int *p1=&a0, *p2=&a9, t; while(p2-p10) /*兩個指針變量相減兩個指針變量相減*/ t=*p1; *p1=*p2; *p2=t; p1+; p2-; for(t=0; t10; t+
20、) printf(a%d=%dn, t, at); 程序運行結(jié)果:程序運行結(jié)果:a0=19a1=17a2=15a9=12021-9-2919 program design in c languagepage8.2.5 指針變量作為函數(shù)參數(shù)特點:特點: 將變量地址作為實參傳送到被調(diào)用函數(shù)中;將變量地址作為實參傳送到被調(diào)用函數(shù)中; 遵循遵循“單向值傳遞單向值傳遞”方式(特殊的地址值);方式(特殊的地址值); 被調(diào)用函數(shù)不能改變實參指針的值,但可以被調(diào)用函數(shù)不能改變實參指針的值,但可以改變實參指針?biāo)赶蜃兞康闹?;改變實參指針?biāo)赶蜃兞康闹担?可以得到多個返回值??梢缘玫蕉鄠€返回值。2021-9-29
21、20 program design in c languagepage8.2.5 指針變量作為函數(shù)參數(shù)例例 交換實參指針?biāo)赶蜃兞康闹到粨Q實參指針?biāo)赶蜃兞康闹?include void swap(int *x, int *y) /*形參為相同類型的指針變量形參為相同類型的指針變量*/ int t; t=*x; *x=*y; *y=t; /*交換指針變量所指向變量的值交換指針變量所指向變量的值*/void main() int a=10, b=20; printf(1) a=%d, b=%dn, a, b); swap( &a , &b ); /*實參為變量的地址(指針)實參為變量的地址(指針
22、)*/ printf(2) a=%d, b=%dn, a, b);程序運行結(jié)果:程序運行結(jié)果:1) a=10, b=202) a=20, b=10地址值傳遞地址值傳遞2021-9-2921 program design in c languagepage8.2.5 指針變量作為函數(shù)參數(shù)例例 交換形參指針變量的值交換形參指針變量的值#include void swap(int *x, int *y) /*形參為相同類型的指針變量形參為相同類型的指針變量*/ int *t; t=x; x=y; y=t; /*交換指針變量的值交換指針變量的值*/void main( ) int a=10, b=20
23、, *p=&a, *q=&b; printf(1) a=%d, b=%dn, *p, *q); swap( p , q ); /*實參為指針變量實參為指針變量*/ printf(2) a=%d, b=%dn, *p, *q);程序運行結(jié)果:程序運行結(jié)果:1) a=10, b=202) a=10, b=20地址值傳遞地址值傳遞2021-9-2922 program design in c languagepage第八章第八章 指針指針 數(shù)組的指針和指向數(shù)組的指針變量數(shù)組的指針和指向數(shù)組的指針變量字符串的指針和指向字符串的指針變量字符串的指針和指向字符串的指針變量2021-9-2923 progr
24、am design in c languagepage8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 數(shù)組的指針:數(shù)組的首地址。數(shù)組的指針:數(shù)組的首地址。一維數(shù)組的指針:一維數(shù)組的首地址,也就一維數(shù)組的指針:一維數(shù)組的首地址,也就是一維數(shù)組中第一個元素的地址。是一維數(shù)組中第一個元素的地址。c語言規(guī)定:數(shù)組名代表數(shù)組的首地址。語言規(guī)定:數(shù)組名代表數(shù)組的首地址。 若有:若有:int a10; 則:則:a 與與 a0 是等價的是等價的 數(shù)組元素的指針:數(shù)組元素的地址。數(shù)組元素的指針:數(shù)組元素的地址。 指向一維數(shù)組元素的指針變量:存放一維數(shù)組指向一維數(shù)組元素的指針變量:存放一維數(shù)組首地址或數(shù)組
25、元素地址的變量。首地址或數(shù)組元素地址的變量。2021-9-2924 program design in c languagepage8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 一維數(shù)組的首地址加上偏移量一維數(shù)組的首地址加上偏移量x即可得到其他數(shù)即可得到其他數(shù)組元素的地址。組元素的地址。 例如:例如: int a10, *p; p=a; /* 等價于等價于 p=&a0 */ 則有:則有: &a1 等價于等價于 a+1 或或 p+1 &ai 等價于等價于 a+i 或或 p+i 注意:注意:p+i指向數(shù)組的第指向數(shù)組的第i個元素,而不是簡單地個元素,而不是簡單地使指針變量使指針變量p的值
26、加的值加i。其所代表的地址實際上是。其所代表的地址實際上是p+isize(size為一個數(shù)組元素所占的字節(jié)數(shù))。為一個數(shù)組元素所占的字節(jié)數(shù))。2021-9-2925 program design in c languagepage8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 訪問一個數(shù)組元素主要有兩種形式:訪問一個數(shù)組元素主要有兩種形式:下標(biāo)法:用下標(biāo)法:用 ai 的形式存取數(shù)組元素。的形式存取數(shù)組元素。指針法:用指針法:用 *(a+i) 或或 *(p+i) 的形式存取數(shù)組的形式存取數(shù)組元素。元素。 其中其中a是一維數(shù)組名,是一維數(shù)組名,p是指向數(shù)組元素的指是指向數(shù)組元素的指針變量。
27、針變量。p的初值為數(shù)組的初值為數(shù)組a的首地址,可以通的首地址,可以通過指針變量賦值或加過指針變量賦值或加/減一個整數(shù)使減一個整數(shù)使p指向不指向不同的數(shù)組元素。同的數(shù)組元素。 例如:例如:int a10, *p=a; p+; /* p指向指向a1 */ p=a+5; /* p指向指向a5 */2021-9-2926 program design in c languagepage8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 例例 通過下標(biāo)法存取數(shù)組元素通過下標(biāo)法存取數(shù)組元素#include void main( ) int a10, i; for(i=0; i10; i+) scanf
28、(%d, &ai); for(i=0; i10; i+) printf(%5d, ai); printf(n);2021-9-2927 program design in c languagepage8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 例例 通過數(shù)組名計算元素地址存取數(shù)組元素通過數(shù)組名計算元素地址存取數(shù)組元素#include void main( ) int a10, i; for(i=0; i10; i+) scanf(%d, a+i); for(i=0; i10; i+) printf(%5d, *(a+i); printf(n);2021-9-2928 program
29、 design in c languagepage8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 例例 通過指針變量存取數(shù)組元素通過指針變量存取數(shù)組元素#include void main( ) int a10, *p; for(p=a; pa+10; p+) scanf(%d, p); for(p=a; pa+10; p+) printf(%5d, *p); printf(n);2021-9-2929 program design in c languagepage8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 用指針法訪問數(shù)組元素的注意事項:用指針法訪問數(shù)組元素的注意事項:
30、數(shù)組名是一個常量,不允許重新賦值。數(shù)組名是一個常量,不允許重新賦值。p+i和和a+i均表示數(shù)組元素均表示數(shù)組元素ai的地址,均指向的地址,均指向ai。 *(p+i)和和*(a+i)均表示均表示p+i和和a+i所指對象的內(nèi)所指對象的內(nèi)容,即容,即ai。 *p+ 等價于等價于 *(p+),其作用是先得到,其作用是先得到*p,再使再使p=p+1。2021-9-2930 program design in c languagepage8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 用指針法訪問數(shù)組元素的注意事項:用指針法訪問數(shù)組元素的注意事項:(*p)+:表示將:表示將p所指向元素的值加所指向
31、元素的值加1。 例如:例如: int a5=0, 2, 4, 6, 8, *p; p=a+2; (*p)+; printf(%dn, *p); 程序段輸出結(jié)果為:程序段輸出結(jié)果為:52021-9-2931 program design in c languagepage8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 例例 分析下面程序的輸出結(jié)果分析下面程序的輸出結(jié)果#include void main( ) int a5=0, 2, 4, 6, 8, *p, i; p=a; (*p)+; p=a+1; +(*p); p=a+2; (*p)-; p=a+3; -(*p); for(i=0
32、; i=4; i+) printf(%5d, ai); printf(n);程序運行結(jié)果程序運行結(jié)果: 1 3 3 5 82021-9-2932 program design in c languagepage8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 用指針法訪問數(shù)組元素的注意事項:用指針法訪問數(shù)組元素的注意事項: 實際上是變址運算符,即編譯時是將數(shù)組實際上是變址運算符,即編譯時是將數(shù)組元素元素ai處理成處理成*(a+i)的。因此指向數(shù)組元素的。因此指向數(shù)組元素的指針變量也可帶下標(biāo)。的指針變量也可帶下標(biāo)。 例如:例如:*(p+i) 可以表示成可以表示成 pi。 注意:如果注意:如
33、果p不指向不指向a0,則,則pi和和ai是不一是不一樣的。樣的。 例如:例如:int a10, *p; p=a+3; /* p指向指向a3 */ p3=25; /* p3等價于等價于a6 */ 這種方式容易出錯,一般不提倡使用。這種方式容易出錯,一般不提倡使用。2021-9-2933 program design in c languagepage8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 數(shù)組元素的訪問小結(jié)數(shù)組元素的訪問小結(jié)int i, a10, *p=a;表表 現(xiàn)現(xiàn) 形形 式式含含 義義&a0 a p一維數(shù)組首地址一維數(shù)組首地址&ai a+i p+i一維數(shù)組下標(biāo)為一維數(shù)組下標(biāo)為
34、 i 的元素地址的元素地址a0 *a *p一維數(shù)組下標(biāo)為一維數(shù)組下標(biāo)為 0 的元素的的元素的值值ai *(a+i) pi *(p+i) 一維數(shù)組下標(biāo)為一維數(shù)組下標(biāo)為 i 的元素的值的元素的值2021-9-2934 program design in c languagepage8.3.3 數(shù)組名作為函數(shù)參數(shù) 一維數(shù)組名作為函數(shù)參數(shù)的特點:一維數(shù)組名作為函數(shù)參數(shù)的特點: 作為實參的數(shù)組名表示數(shù)組的首地址,是一個作為實參的數(shù)組名表示數(shù)組的首地址,是一個地址常量;地址常量; 作為形參的數(shù)組名并不表示數(shù)組的首地址,它作為形參的數(shù)組名并不表示數(shù)組的首地址,它不是一個地址常量而是一個指針變量;不是一個地址
35、常量而是一個指針變量; 在函數(shù)調(diào)用時,實參向形參傳遞數(shù)組的首地址;在函數(shù)調(diào)用時,實參向形參傳遞數(shù)組的首地址; 可以用指向數(shù)組元素的指針變量作為函數(shù)參數(shù)??梢杂弥赶驍?shù)組元素的指針變量作為函數(shù)參數(shù)。2021-9-2935 program design in c languagepage例例 用選擇法對用選擇法對10個整數(shù)由大到小排序個整數(shù)由大到小排序#include void sort(int , int);void main( ) int *p, i, a10; printf(input data:n); for(i=0; i10; i+) scanf(%d, a+i); sort(a, 10)
36、; for(p=a; pa+10; p+) printf(%5d, *p); printf(n);void sort(int x , int n) int *x_end, *y, temp; x_end = x+n;for( ; xx_end-1; x+) for(y=x+1; y*x) temp=*x; *x=*y; *y=temp; 8.3.3 數(shù)組名作為函數(shù)參數(shù) 2021-9-2936 program design in c languagepage8.4.1 字符串指針變量的定義與引用 字符串常量的處理是用字符數(shù)組來實現(xiàn)的。也字符串常量的處理是用字符數(shù)組來實現(xiàn)的。也就是說,無論是否定義
37、了字符數(shù)組,對于程序就是說,無論是否定義了字符數(shù)組,對于程序中出現(xiàn)的字符串,系統(tǒng)都會在內(nèi)存中開辟一個中出現(xiàn)的字符串,系統(tǒng)都會在內(nèi)存中開辟一個字符數(shù)組連續(xù)存儲空間來存放該字符串常量。字符數(shù)組連續(xù)存儲空間來存放該字符串常量。 字符串的指針:字符串的首字符地址,也就是字符串的指針:字符串的首字符地址,也就是存放字符串的字符數(shù)組的首地址。存放字符串的字符數(shù)組的首地址。 字符串指針變量:通常把字符串指針變量:通常把char型指針變量稱為型指針變量稱為字符串指針變量。也就是說,指向字符串的指字符串指針變量。也就是說,指向字符串的指針變量等同于指向字符數(shù)組元素的指針變量,針變量等同于指向字符數(shù)組元素的指針變
38、量,可以指向字符串中的任意一個字符??梢灾赶蜃址械娜我庖粋€字符。2021-9-2937 program design in c languagepage8.4.1 字符串指針變量的定義與引用 字符串指針變量的定義和初始化字符串指針變量的定義和初始化方式一:將存放字符串的字符數(shù)組名賦給字符方式一:將存放字符串的字符數(shù)組名賦給字符串指針變量,讓字符串指針變量指向字符串的串指針變量,讓字符串指針變量指向字符串的首字符,然后通過移動指針變量來訪問字符串首字符,然后通過移動指針變量來訪問字符串的其他字符。的其他字符。 例如:例如: char str = welcome to china!; char
39、 *p; p = str; /* 等價于等價于 p = &str0 */2021-9-2938 program design in c languagepage8.4.1 字符串指針變量的定義與引用 字符串指針變量的定義和初始化字符串指針變量的定義和初始化方式二:在程序中定義一個字符串指針變量,方式二:在程序中定義一個字符串指針變量,并將字符串的首地址直接賦給它,然后通過移并將字符串的首地址直接賦給它,然后通過移動指針變量來訪問字符串的其他字符。動指針變量來訪問字符串的其他字符。 例如:例如: char *p = welcome to china!; 等價于:等價于: char *p; p =
40、 welcome to china!; 這里的字符串指針變量這里的字符串指針變量p指向字符串的首字符,指向字符串的首字符,即第一個字符即第一個字符w。2021-9-2939 program design in c languagepage例例 用字符串指針變量實現(xiàn)字符串操作用字符串指針變量實現(xiàn)字符串操作#include void main( ) char *str = welcome to china!; printf(%sn, str); /*整體引用字符串整體引用字符串*/ for ( ; *str!=0; str+ ) printf(%c, *str); /*逐個引用字符串中的字符逐個引
41、用字符串中的字符*/ printf(n);8.4.1 字符串指針變量的定義與引用 程序運行結(jié)果程序運行結(jié)果:welcome to china!welcome to china!2021-9-2940 program design in c languagepage8.4.2 字符串指針變量與字符數(shù)組 字符數(shù)組是由若干個元素組成,每個元素存放一字符數(shù)組是由若干個元素組成,每個元素存放一個字符;而字符串指針變量存放的是字符串中某個字符;而字符串指針變量存放的是字符串中某一個字符的地址。一個字符的地址。賦值方式不同。字符數(shù)組只能對各個元素分別賦賦值方式不同。字符數(shù)組只能對各個元素分別賦值,而字符串指
42、針變量只用賦給字符串的首地址值,而字符串指針變量只用賦給字符串的首地址就可以了。就可以了。 例如,下面的賦值是正確的:例如,下面的賦值是正確的: char *str; str = welcome to china!; /*str是指針變量是指針變量*/ 下面的賦值是錯誤的:下面的賦值是錯誤的: char str30; str = welcome to china!; /*str是數(shù)組名是數(shù)組名*/2021-9-2941 program design in c languagepage8.4.2 字符串指針變量與字符數(shù)組 字符串指針變量占用的內(nèi)存要少于字符數(shù)組。字符串指針變量占用的內(nèi)存要少于字符數(shù)組。 例如,編譯系統(tǒng)為下面二維字符數(shù)組的定義及初始例如,編譯系統(tǒng)為下面二維字符數(shù)組的定義及初始化分配了化分配了36個字節(jié)的內(nèi)存空間:個字節(jié)的內(nèi)存空間: char st
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度銷售業(yè)務(wù)員勞動合同(含銷售業(yè)績獎金分配細則)2篇
- 養(yǎng)老產(chǎn)業(yè)發(fā)展與政策支持考核試卷
- 體育場館體育設(shè)施無障礙設(shè)計考核試卷
- 太陽能器具在戶外馬術(shù)場的應(yīng)用考核試卷
- 高端兒童畫室課程設(shè)計
- 2025-2030全球扼流圈非晶鐵芯行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球業(yè)務(wù)風(fēng)控解決方案行業(yè)調(diào)研及趨勢分析報告
- 組合預(yù)測法課程設(shè)計
- 物聯(lián)軟件培訓(xùn)課程設(shè)計
- 織造課程設(shè)計
- 數(shù)學(xué)八下學(xué)霸電子版蘇教版
- SQL Server 2000在醫(yī)院收費審計的運用
- 《FANUC-Oi數(shù)控銑床加工中心編程技巧與實例》教學(xué)課件(全)
- 微信小程序運營方案課件
- 陳皮水溶性總生物堿的升血壓作用量-效關(guān)系及藥動學(xué)研究
- 安全施工專項方案報審表
- 學(xué)習(xí)解讀2022年新制定的《市場主體登記管理條例實施細則》PPT匯報演示
- 好氧廢水系統(tǒng)調(diào)試、驗收、運行、維護手冊
- 中石化ERP系統(tǒng)操作手冊
- 五年級上冊口算+脫式計算+豎式計算+方程
- 氣體管道安全管理規(guī)程
評論
0/150
提交評論