c語(yǔ)言程序設(shè)計(jì)課件第14講_第1頁(yè)
c語(yǔ)言程序設(shè)計(jì)課件第14講_第2頁(yè)
c語(yǔ)言程序設(shè)計(jì)課件第14講_第3頁(yè)
c語(yǔ)言程序設(shè)計(jì)課件第14講_第4頁(yè)
c語(yǔ)言程序設(shè)計(jì)課件第14講_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第十四講Begin:第八章 指針 數(shù)組的指針和指向數(shù)組的指針變量字符串的指針和指向字符串的指針變量8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 數(shù)組的指針:數(shù)組的首地址。一維數(shù)組的指針:一維數(shù)組的首地址,也就是一維數(shù)組中第一個(gè)元素的地址。C語(yǔ)言規(guī)定:數(shù)組名代表數(shù)組的首地址。 若有:int a10; 則:a 與 a0 是等價(jià)的數(shù)組元素的指針:數(shù)組元素的地址。指向一維數(shù)組元素的指針變量:存放一維數(shù)組首地址或數(shù)組元素地址的變量。8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 一維數(shù)組的首地址加上偏移量x即可得到其他數(shù)組元素的地址。 例如: int a10, *p; p=a; /*

2、等價(jià)于 p=&a0 */ 則有:&a1 等價(jià)于 a+1 或 p+1&ai 等價(jià)于 a+i 或 p+i 注意:p+i指向數(shù)組的第i個(gè)元素,而不是簡(jiǎn)單地使指針變量p的值加i。其所代表的地址實(shí)際上是p+isize(size為一個(gè)數(shù)組元素所占的字節(jié)數(shù))。8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 訪問一個(gè)數(shù)組元素主要有兩種形式:下標(biāo)法:用 ai 的形式存取數(shù)組元素。指針法:用 *(a+i) 或 *(p+i) 的形式存取數(shù)組元素。 其中a是一維數(shù)組名,p是指向數(shù)組元素的指針變量。p的初值為數(shù)組a的首地址,可以通過指針變量賦值或加/減一個(gè)整數(shù)使p指向不同的數(shù)組元素。 例如:int a10, *

3、p=a; p+; /* p指向a1 */ p=a+5; /* p指向a5 */8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 例 通過下標(biāo)法存取數(shù)組元素#include void main( ) int a10, i; for(i=0; i10; i+) scanf(%d, &ai); for(i=0; i10; i+) printf(%5d, ai); printf(n);8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 例 通過數(shù)組名計(jì)算元素地址存取數(shù)組元素#include void main( ) int a10, i; for(i=0; i10; i+) scanf(%d

4、, a+i); for(i=0; i10; i+) printf(%5d, *(a+i); printf(n);8.3.1 一維數(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);8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 用指針法訪問數(shù)組元素的注意事項(xiàng):數(shù)組名是一個(gè)常量,不允許重新賦值。p+i和a+i均表示數(shù)組元素ai的地址,均指向ai

5、。 *(p+i)和*(a+i)均表示p+i和a+i所指對(duì)象的內(nèi)容,即ai。 *p+ 等價(jià)于 *(p+),其作用是先得到*p,再使p=p+1。8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 用指針法訪問數(shù)組元素的注意事項(xiàng):(*p)+:表示將p所指向元素的值加1。 例如: int a5=0, 2, 4, 6, 8, *p; p=a+2; (*p)+; printf(%dn, *p); 程序段輸出結(jié)果為:58.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 例 分析下面程序的輸出結(jié)果#include void main( ) int a5=0, 2, 4, 6, 8, *p, i; p=

6、a; (*p)+; p=a+1; +(*p); p=a+2; (*p)-; p=a+3; -(*p); for(i=0; i=4; i+) printf(%5d, ai); printf(n);程序運(yùn)行結(jié)果: 1 3 3 5 88.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 用指針法訪問數(shù)組元素的注意事項(xiàng): 實(shí)際上是變址運(yùn)算符,即編譯時(shí)是將數(shù)組元素ai處理成*(a+i)的。因此指向數(shù)組元素的指針變量也可帶下標(biāo)。 例如:*(p+i) 可以表示成 pi。 注意:如果p不指向a0,則pi和ai是不一樣的。 例如:int a10, *p; p=a+3; /* p指向a3 */ p3=25; /

7、* p3等價(jià)于a6 */ 這種方式容易出錯(cuò),一般不提倡使用。8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量 數(shù)組元素的訪問小結(jié)int i, a10, *p=a;表 現(xiàn) 形 式含 義&a0 a p一維數(shù)組首地址&ai a+i p+i一維數(shù)組下標(biāo)為 i 的元素地址a0 *a *p一維數(shù)組下標(biāo)為 0 的元素的值ai *(a+i) pi *(p+i)一維數(shù)組下標(biāo)為 i 的元素的值8.3.3 數(shù)組名作為函數(shù)參數(shù) 一維數(shù)組名作為函數(shù)參數(shù)的特點(diǎn):作為實(shí)參的數(shù)組名表示數(shù)組的首地址,是一個(gè)地址常量;作為形參的數(shù)組名并不表示數(shù)組的首地址,它不是一個(gè)地址常量而是一個(gè)指針變量;在函數(shù)調(diào)用時(shí),實(shí)參向形參傳遞數(shù)組

8、的首地址;可以用指向數(shù)組元素的指針變量作為函數(shù)參數(shù)。例 用選擇法對(duì)10個(gè)整數(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); 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+) f

9、or(y=x+1; y*x) temp=*x; *x=*y; *y=temp; 8.3.3 數(shù)組名作為函數(shù)參數(shù) 8.4.1 字符串指針變量的定義與引用 字符串常量的處理是用字符數(shù)組來(lái)實(shí)現(xiàn)的。對(duì)于程序中出現(xiàn)的字符串,系統(tǒng)都會(huì)在內(nèi)存中開辟一個(gè)字符數(shù)組連續(xù)存儲(chǔ)空間來(lái)存放該字符串常量。字符串的指針:字符串的首字符地址。字符串指針變量:指向字符串的指針變量。8.4.1 字符串指針變量的定義與引用 字符串指針變量的定義和初始化方式一:將存放字符串的字符數(shù)組名賦給字符串指針變量,讓字符串指針變量指向字符串的首字符,然后通過移動(dòng)指針變量來(lái)訪問字符串的其他字符。 例如: char str = e to Chin

10、a!; char *p; p = str; /* 等價(jià)于 p = &str0 */8.4.1 字符串指針變量的定義與引用 字符串指針變量的定義和初始化方式二:在程序中定義一個(gè)字符串指針變量,并將字符串的首地址直接賦給它,然后通過移動(dòng)指針變量來(lái)訪問字符串的其他字符。 例如: char *p = e to China!; 等價(jià)于: char *p; p = e to China!; 這里的字符串指針變量p指向字符串的首字符,即第一個(gè)字符W。例 用字符串指針變量實(shí)現(xiàn)字符串操作#include void main( ) char *str = e to China!; printf(%sn, str)

11、; /*整體引用字符串*/ for ( ; *str!=0; str+ ) printf(%c, *str); /*逐個(gè)引用字符串中的字符*/ printf(n);8.4.1 字符串指針變量的定義與引用 程序運(yùn)行結(jié)果: e to China! e to China!8.4.2 字符串指針變量與字符數(shù)組 字符數(shù)組是由若干個(gè)元素組成,每個(gè)元素存放一個(gè)字符;而字符串指針變量存放的是字符串中某一個(gè)字符的地址。賦值方式不同。字符數(shù)組只能對(duì)各個(gè)元素分別賦值,而字符串指針變量只用賦給字符串的首地址就可以了。 例如,下面的賦值是正確的: char *str; str = e to China!; /*str是

12、指針變量*/ 下面的賦值是錯(cuò)誤的: char str30; str = e to China!; /*str是數(shù)組名*/8.4.2 字符串指針變量與字符數(shù)組 字符串指針變量占用的內(nèi)存要少于字符數(shù)組。 例如,編譯系統(tǒng)為下面二維字符數(shù)組的定義及初始化分配了36個(gè)字節(jié)的內(nèi)存空間: char str218 = Hello, e to China!; 為下面兩個(gè)字符串指針變量的定義及初始化分配了28個(gè)字節(jié)的內(nèi)存空間: char *str1 = Hello, *str2 = e to China;字符串指針變量的值是可以改變的,而字符數(shù)組的數(shù)組名永遠(yuǎn)代表該數(shù)組的首地址,它的值是不會(huì)變化的。例 將字符串st

13、r1復(fù)制到字符串str2#include void main( ) char str1 =Copy string, str230; char *p1=str1, *p2=str2; while(*p1!=0) *p2+=*p1+; *p2=0; printf(String str2 = ); puts(str2);程序運(yùn)行結(jié)果:String str2 = Copy string8.4.2 字符串指針變量與字符數(shù)組 8.4.3 字符串指針變量作為函數(shù)參數(shù) 特點(diǎn):用字符數(shù)組名或字符串指針變量名作為實(shí)參,向形參傳遞字符串的首地址;作為形參的字符數(shù)組或字符串指針變量本質(zhì)上都是字符串指針變量;在被調(diào)用函

14、數(shù)中可以改變字符串的內(nèi)容,在主調(diào)函數(shù)中可以得到改變以后的字符串。例 連接兩個(gè)字符串str1和str2,連接結(jié)果放在str1中#include void strlink(char *, char *);void main( ) char str115=Hello , str2 =World!; strlink(str1, str2); printf(String str1 = %sn, str1);void strlink(char *s, char *t) while(*s!=0) s+; /* 使s指向字符串str1的末尾 */ while(*t!=0) *s+=*t+; /* 將str2中的字符逐個(gè)連接到str1的末尾 */ *s=0; /* 在str1的末尾加

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論