C15-指針(續(xù)).ppt_第1頁
C15-指針(續(xù)).ppt_第2頁
C15-指針(續(xù)).ppt_第3頁
C15-指針(續(xù)).ppt_第4頁
C15-指針(續(xù)).ppt_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、 p=a; /* 等價于 p= p+; /* p指向a1 */ p=a+5; /* p指向a5 */,8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量,例 通過下標法存取數(shù)組元素 #include void main( ) int a10, i; for(i=0; i10; i+) scanf(%d, ,8.3.1 一維數(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

3、, *(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ù)組元素的注意事項: 數(shù)組名是一個常量,不允許重新賦值。 p+i和a+i均表示數(shù)組元素ai的地址,均指向ai。 *(p+i)和*(a+i)均表示p+i和a+i所指對象的內(nèi)

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

5、+2; (*p)-; p=a+3; -(*p); for(i=0; i=4; i+) printf(%5d, ai); printf(n); ,程序運行結(jié)果: 1 3 3 5 8,8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量,用指針法訪問數(shù)組元素的注意事項: 實際上是變址運算符,即編譯時是將數(shù)組元素ai處理成*(a+i)的。因此指向數(shù)組元素的指針變量也可帶下標。 例如:*(p+i) 可以表示成 pi。 注意:如果p不指向a0,則pi和ai是不一樣的。 例如:int a10, *p; p=a+3; /* p指向a3 */ p3=25; /* p3等價于a6 */ 這種方式容易出錯,一般

6、不提倡使用。,8.3.1 一維數(shù)組的指針和指向一維數(shù)組元素的指針變量,數(shù)組元素的訪問小結(jié),8.3.3 數(shù)組名作為函數(shù)參數(shù),一維數(shù)組名作為函數(shù)參數(shù)的特點: 作為實參的數(shù)組名表示數(shù)組的首地址,是一個地址常量; 作為形參的數(shù)組名并不表示數(shù)組的首地址,它不是一個地址常量而是一個指針變量; 在函數(shù)調(diào)用時,實參向形參傳遞數(shù)組的首地址; 可以用指向數(shù)組元素的指針變量作為函數(shù)參數(shù)。,例 用選擇法對10個整數(shù)由大到小排序,#include void sort(int , int); void main( ) int *p, i, a10; printf(Input data:n); for(i=0; i10;

7、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( ; x*x) temp=*x; *x=*y; *y=temp; ,8.3.3 數(shù)組名作為函數(shù)參數(shù),8.4.1 字符串指針變量的定義與引用,字符串常量的處理是用字符數(shù)組來實現(xiàn)的。也就是說,無論是否定義了字符數(shù)組,對于程序中出現(xiàn)的字符串,系統(tǒng)都會在內(nèi)存中開辟一個字符數(shù)組連續(xù)存儲空間來存放該字符串常量。 字符串的指

8、針:字符串的首字符地址,也就是存放字符串的字符數(shù)組的首地址。 字符串指針變量:通常把char型指針變量稱為字符串指針變量。也就是說,指向字符串的指針變量等同于指向字符數(shù)組元素的指針變量,可以指向字符串中的任意一個字符。,8.4.1 字符串指針變量的定義與引用,字符串指針變量的定義和初始化 方式一:將存放字符串的字符數(shù)組名賦給字符串指針變量,讓字符串指針變量指向字符串的首字符,然后通過移動指針變量來訪問字符串的其他字符。 例如: char str = Welcome to China!; char *p; p = str; /* 等價于 p = 等價于: char *p; p = Welcome

9、 to China!; 這里的字符串指針變量p指向字符串的首字符,即第一個字符W。,例 用字符串指針變量實現(xiàn)字符串操作 #include void main( ) char *str = Welcome to China!; printf(%sn, str); /*整體引用字符串*/ for ( ; *str!=0; str+ ) printf(%c, *str); /*逐個引用字符串中的字符*/ printf(n);,8.4.1 字符串指針變量的定義與引用,程序運行結(jié)果: Welcome to China! Welcome to China!,8.4.2 字符串指針變量與字符數(shù)組,字符數(shù)組是

10、由若干個元素組成,每個元素存放一個字符;而字符串指針變量存放的是字符串中某一個字符的地址。 賦值方式不同。字符數(shù)組只能對各個元素分別賦值,而字符串指針變量只用賦給字符串的首地址就可以了。 例如,下面的賦值是正確的: char *str; str = Welcome to China!; /*str是指針變量*/ 下面的賦值是錯誤的: char str30; str = Welcome to China!; /*str是數(shù)組名*/,8.4.2 字符串指針變量與字符數(shù)組,字符串指針變量占用的內(nèi)存要少于字符數(shù)組。 例如,編譯系統(tǒng)為下面二維字符數(shù)組的定義及初始化分配了36個字節(jié)的內(nèi)存空間: char

11、str218 = Hello, Welcome to China!; 為下面兩個字符串指針變量的定義及初始化分配了28個字節(jié)的內(nèi)存空間: char *str1 = Hello, *str2 = Welcome to China; 字符串指針變量的值是可以改變的,而字符數(shù)組的數(shù)組名永遠代表該數(shù)組的首地址,它的值是不會變化的。,例 將字符串str1復(fù)制到字符串str2 #include void main( ) char str1 =Copy string, str230; char *p1=str1, *p2=str2; while(*p1!=0) *p2+=*p1+; *p2=0; print

12、f(String str2 = ); puts(str2); ,程序運行結(jié)果: String str2 = Copy string,8.4.2 字符串指針變量與字符數(shù)組,8.4.3 字符串指針變量作為函數(shù)參數(shù),特點: 用字符數(shù)組名或字符串指針變量名作為實參,向形參傳遞字符串的首地址; 作為形參的字符數(shù)組或字符串指針變量本質(zhì)上都是字符串指針變量; 在被調(diào)用函數(shù)中可以改變字符串的內(nèi)容,在主調(diào)函數(shù)中可以得到改變以后的字符串。,例 連接兩個字符串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中的字符逐個連接到str1的末尾 */ *s=0; /* 在str1的末

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論