10_11_第10章_指針_2011.ppt_第1頁
10_11_第10章_指針_2011.ppt_第2頁
10_11_第10章_指針_2011.ppt_第3頁
10_11_第10章_指針_2011.ppt_第4頁
10_11_第10章_指針_2011.ppt_第5頁
已閱讀5頁,還剩86頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第十章指針,掌握指針和指針變量的概念;掌握數(shù)組的指針和指針數(shù)組的使用;掌握字符串指針和指向字符串的指針變量的使用;掌握函數(shù)指針和函數(shù)指針的使用;理解指針的概念和使用。指針無疑是C語言最明顯和最令人興奮的特征之一。它增加了語言的力量和靈活性。盡管如此,毫無疑問,指針是C語言最獨(dú)特和最令人興奮的特性之一,它增加了C語言的能力和靈活性。雖然對(duì)初學(xué)者來說,它們看起來有點(diǎn)令人困惑和難以理解,但是一旦掌握了它們,它們將成為強(qiáng)大的工具并且易于使用。指針為程序員提供了許多好處,包括:1)它們?cè)谔幚頂?shù)組和數(shù)據(jù)表時(shí)更有效;2)用于通過函數(shù)變量從一個(gè)函數(shù)返回多個(gè)函數(shù)值;3)使用指向字符串的指針數(shù)組可以節(jié)省內(nèi)存中的數(shù)

2、組存儲(chǔ)空間;4)減少程序的長度和復(fù)雜性;5)加速程序處理速度和減少執(zhí)行時(shí)間,指針為程序員提供了許多好處。它們包括:指針,在處理數(shù)組和數(shù)據(jù)表時(shí)效率更高;指針可用于通過函數(shù)參數(shù)從函數(shù)返回多個(gè)值。對(duì)字符串使用指針數(shù)組可以節(jié)省內(nèi)存中的數(shù)據(jù)存儲(chǔ)空間。指針減少了程序的長度和復(fù)雜性。它們提高了執(zhí)行速度,從而減少了程序執(zhí)行時(shí)間。存儲(chǔ)器被分成單元,這些單元按順序排列。每個(gè)單元都有一個(gè)稱為內(nèi)存地址的數(shù)字,對(duì)內(nèi)存數(shù)據(jù)的訪問是通過該地址進(jìn)行的。高級(jí)語言用變量等高級(jí)概念掩蓋了內(nèi)存單元和地址等低級(jí)概念,因此我們?cè)诰帉懗绦驎r(shí)不必關(guān)心硬件細(xì)節(jié),但內(nèi)存和地址仍然是最基本的概念。存儲(chǔ)單元的最小單位是字節(jié)。1。存儲(chǔ)器的概念,地址:

3、為了訪問存儲(chǔ)器中的存儲(chǔ)單元,它應(yīng)該被編號(hào),這個(gè)數(shù)字被稱為存儲(chǔ)器地址。通過該地址,我們可以訪問由該地址標(biāo)識(shí)的存儲(chǔ)單元。2.地址的概念,變量地址:每個(gè)變量總是在內(nèi)存中占據(jù)幾個(gè)連續(xù)的字節(jié),起始字節(jié)的地址就是變量的地址。2007,存儲(chǔ)單元,10.1指針及其相關(guān)概念,指針:變量的地址稱為變量的指針。許多高級(jí)語言將程序?qū)ο蟮牡刂芬暈橐环N數(shù)據(jù),稱為地址值或指針值。指針變量:如果一個(gè)變量專用于存儲(chǔ)另一個(gè)變量的地址(指針),前者稱為指針變量。換句話說,其值為地址的變量稱為指針變量,簡稱指針。當(dāng)變量的地址存儲(chǔ)在指針變量中時(shí),我們可以說指針指向變量。變量的訪問方法:直接訪問和間接訪問。10.2變量指針和指向變量的指

4、針變量,1。指針變量的定義,如: int *ptr1,*ptr2,I,j,k;double * q *,s,x,y,z;char *ch1,ch2,ch310指針變量的類型:描述指針指向的變量的類型。聲明指針指向的變量類型。鍵入* variables _ name定義指針變量時(shí)要注意以下問題:變量名ptr2前面的“*”不能省略,如果寫為int *ptr1,ptr 2;那么ptr2被定義為整數(shù)變量,而不是整數(shù)指針變量。ptr2定義中的“*”是一個(gè)整數(shù)變量,表示定義的變量是指針變量,但指針變量名稱是ptr1和ptr2,而不是*ptr1和*ptr2。Int *表示聲明一個(gè)整數(shù)指針。點(diǎn)變量名是ptr1

5、,ptr2,但不是*ptr1,*ptr2。指針變量只能指向定義中指定類型的變量。這個(gè)指定的類型稱為指針變量的“基本類型”。指針的類型必須與指針?biāo)赶虻淖兞康念愋拖嗥ヅ?。該類型稱為指針的基本類型。例如,上面示例中的ptr1和ptr2只能指向整數(shù)變量,但不能指向?qū)崝?shù)或字符變量。它們的“基本類型”是相同的,它們都是整數(shù)。定義指針變量后,不確定變量指向何處。也就是說,這個(gè)變量的值是不確定的。在引用指針變量之前指向變量并不重要。第二,指針操作變量指針的操作,指針操作符(,我們也可以用這個(gè)方法來改變變量:* ptr=15相當(dāng)于i=15可以看出,指針運(yùn)算符“*”可以引用一個(gè)變量。例如,當(dāng)ptr指向變量I時(shí),

6、*ptr等于I。當(dāng)ptr的指針指向有效的I時(shí),則* ptr等于I。* ptr,pi=,將指針變量的值賦給另一個(gè)指針變量。例如:int i,*pa,* pbPa=,為指針變量分配一個(gè)符號(hào)常量NULL。描述:NULL是一個(gè)空指針,表示指針變量的值沒有意義。目的是避免非法引用尚未初始化的指針變量??罩档亩x在“stdio.h”中。例如:int * pipi=空;描述:定義指針變量時(shí),可以立即為指針變量分配一個(gè)地址值,這是指針變量的初始化。指針變量的初始化也是指針的賦值。例如:float flt,*f_ptr=,指針變量之間的賦值和引用應(yīng)該確保相同的基類型。如果定義:int *p,I;float *q

7、,x;然后:q=,指針操作用于移動(dòng)指針,指針加減(,存儲(chǔ)單元的大小是指針的數(shù)據(jù)類型所需的內(nèi)存大小。例如:ptr n(指針ptr,n是整數(shù))由這個(gè)指針值表示的存儲(chǔ)單元的地址是ptr n*d(其中d是指針?biāo)赶虻淖兞康臄?shù)據(jù)類型所占用的存儲(chǔ)字節(jié)數(shù)),也就是說,指針已經(jīng)移動(dòng)了n個(gè)元素。如果ptr指向一個(gè)數(shù)組am,ptr i指向數(shù)組A的第一個(gè)數(shù)組元素,也就是ai。指針到指針的加法是沒有意義的,所以指針到指針的加法是不必要的。同樣,指針之間沒有乘法或除法。指針到指針的減法運(yùn)算要求兩個(gè)被減去的指針屬于同一類型,并且結(jié)果是一個(gè)整數(shù),它指示兩個(gè)指針之間的數(shù)據(jù)數(shù)量。計(jì)算結(jié)果值的公式為:ptr1-ptr2=(ptr

8、1值-ptr2值)/指針數(shù)據(jù)類型占用的字節(jié)數(shù),例如:int *ptr1,*ptr2,*ptr3,x;int ary5=2,4,8,16,32;ptr1=,x的值是3,2指針的-,=,-=運(yùn)算,并且,=:是將指針移動(dòng)到下一個(gè)或幾個(gè)存儲(chǔ)位置。-,-=:是將指針移動(dòng)到前一個(gè)或幾個(gè)存儲(chǔ)位置。例如:int *ptr,ary5=2,4,6,8,10;ptr=aryptr=3;ptr-;想想看:ptr和(*ptr)有什么區(qū)別?指針表達(dá)式,像其他變量一樣,指針變量也可以用在表達(dá)式中。像其他變量一樣,指針變量可以用在表達(dá)式中。例如,如果p1和p2是正確聲明和初始化的指針,那么下面的語句是有效的。y=* p1 *

9、 * p2/等于(* P1)* *(p2)總和=總和* P1;z=5 *-* p2/* P1;/等于5 *(p2-*)/(* P1)* p2=* p2 10;以下是錯(cuò)誤的。z=5 *-* p2/* P1;P1/p2或p1*p2或p1/3或p1 p2。第三,指針變量被用作函數(shù)參數(shù),并且指針可以被用作函數(shù)參數(shù),這在您想要通過調(diào)用函數(shù)來改變主音函數(shù)的參數(shù)值時(shí)非常有用。例如,編寫一個(gè)用指針變量交換兩個(gè)數(shù)字的函數(shù),void swap(int *p1,int * p2);main() int x1=100,x2=200printf(x1=%d,x2=%dn,x1,x2);swap(,void swap(i

10、nt *p1,int * p2)int temp;temp=* p1* p1=* p2* p2=溫度;說明在交換過程中存儲(chǔ)單元內(nèi)容的變化。想想看:如果一個(gè)函數(shù)的參數(shù)使用整數(shù)變量而不是指針,值的交換能實(shí)現(xiàn)嗎?為什么?通過函數(shù)調(diào)用獲得要改變的n個(gè)值的方法:在主音函數(shù)中設(shè)置n個(gè)變量,并將這n個(gè)變量的地址傳遞給被調(diào)用函數(shù)的參數(shù)指針;通過參數(shù)指針變量和值運(yùn)算符“*”更改這n個(gè)變量的值;回到主音功能,你可以用這些變量改變值。注意:您不能試圖通過更改指針參數(shù)的值來更改指針參數(shù)的值。例如,前面例子中的交換函數(shù)不能寫成int * temptemp=p1p1=p2;p2=溫度。10.3數(shù)組指針和指向數(shù)組的指針變量

11、數(shù)組的常量指針和指向數(shù)組的指針變量,即概念,int a5數(shù)組指針:是數(shù)組的起始地址。a:p=a;相當(dāng)于p=,指針變量p指向數(shù)組元素A0,而pi,a i和b25=2002.使用指針方法引用數(shù)組元素,如果:int a10,*p,I;p=a;那么:*(p i)和*(a i)表示元素ai *(a 3)=45;*(P3)=45;*(p i)也可以寫成p i,而* (pi)、*(a i)、a i和pi是等價(jià)的,都表示數(shù)組a的第11個(gè)元素ai。方法2:通過數(shù)組名稱計(jì)算數(shù)組元素的地址,并找出元素的值。(按數(shù)組名稱和整數(shù))main() int a10=54,65,8,2,3,56,8,21,57,98,I;對(duì)于

12、(I=0;i10printf(M,*(a)I);方法1:下標(biāo)方法。(通過下標(biāo))main() int a10=54,65,8,2,3,56,8,21,57,98,I;對(duì)于(I=0;i10(一)printf(M,ai);方法3:使用指針變量指向數(shù)組元素(通過指針)main () inta10=54,65,8,2,3,56,8,21,57,98,* p,I;p=a;對(duì)于(printf(“n”),I=0;i10(i ) printf(M,* p);在以上三種方法中,使用指針變量是最有效的。描述:指針變量和數(shù)組名稱之間的差異。指針變量是一個(gè)地址變量,它的內(nèi)容可以在程序運(yùn)行過程中改變。數(shù)組名是一個(gè)地址常量,一旦被定義,它的地址就不能改變。指針變量是地址變量,數(shù)組名是地址常量。例如:int I *,p,a6;那么:p=,你不能給常數(shù)賦值。當(dāng)用指針變量編程時(shí),應(yīng)該特別注意指針變量的當(dāng)前值,例如,通過指針變量輸入和輸

溫馨提示

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