資源描述:
《指針變量及指針運算符.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第六章指針第一節(jié)指針與指針變量1.指針的基本概念計算機內(nèi)存是有一片連續(xù)的存儲單元組成,操作系統(tǒng)給每個單元一個編號,這個編號稱為內(nèi)存單元的地址,每個存儲單元占內(nèi)存一個字節(jié)。定義變量時,系統(tǒng)就按照其類型為變量分配一塊連續(xù)的存儲單元。則這塊存儲單元的首地址稱為該變量的指針(也稱該變量的地址)。如:floatf;假設(shè)分配給f的是地址為1500、1501、1502、1503的四個連續(xù)字節(jié)。則稱地址1500是變量f的指針(或說變量f的地址是1500)。所以,變量的地址就是變量的指針。第六章指針第一節(jié)指針與指針變量先來看卡片管理系統(tǒng)假設(shè)有許多存儲不同數(shù)據(jù)的卡片,如圖。想對這些數(shù)據(jù)快速存取,一個好
2、方法就是對每張卡片編號,再為每張卡片取個名字,讓名字和編號一一對應(yīng)起來。這樣就能通過名字存取卡片上的數(shù)據(jù),比如指出卡片名f,就可以由對應(yīng)地址1500處取出數(shù)據(jù)456.789。123您好!…456.789…1500…卡片上數(shù)據(jù)卡片編號1500015002卡片名字abchipf......注意:p是一種特殊的卡片,它存儲的是卡片f的編號,則通過p也能間接地存取卡片f的數(shù)據(jù)。圖5.1第六章指針第一節(jié)指針與指針變量變量值的存取與卡片數(shù)據(jù)存取相類似。每個變量都有名字和地址。同樣是使用變量名通過相應(yīng)地址存取數(shù)據(jù)??梢园褕D5.1理解成變量存儲的情況,如圖5.2。假設(shè)變量f為float型。則讀取f
3、的值是從地址1500開始的四個字節(jié)中取出數(shù)據(jù)456.789。這種稱為“直接存取”方式。特殊變量p存儲了變量f的地址。則可以通過訪問p變量,可以得到地址1500,再訪問1500的存儲單元,也可以得到f的值456.789。這種稱為“間接存取“方式。變量的值地址編號1000500015001002變量名abchipf......123您好!…456.789…1500…圖5.2第六章指針第一節(jié)指針與指針變量象p變量這種,專門存放其他變量的地址的變量,稱為指針變量。如圖5.2,指針變量p里已經(jīng)存儲了f變量的地址,我們又說指針變量p指向了變量f。2.指針變量的定義定義的一般形式:類型名*標(biāo)識符
4、;如:inti,*ip,*jp;/*定義了ip和jp兩個可以指向整型變量的指針變量*/floatf,*p;/*定義了一個可以指向float型變量的指針變量p*/注意:a.定義了一個指針變量,在沒有對它賦值前,它指向的存儲單元是不確定的。b.一個指針變量只能指向其類型相同的變量第六章指針第一節(jié)指針與指針變量3.指針變量的賦值1).通過地址運算符&賦值“&”是單目運算符,作用是對其右邊的對象進行取地址。如:floatf,*p;p=&f;/*這樣指針變量p就指向變量f了*/2).指針變量初始化。如:floatf,*p=&f;變量p指向ff3d變量fff3df的值第六章指針第一節(jié)指針與指針
5、變量3).通過其他指針變量賦值可以把一個指針變量的地址值賦給另一個指針變量,這樣兩個指針變量均指向同一個地址。如:inti,*p1=&i,*p2;p2=p1;指向2f3a變量p1變量i變量p2注意,當(dāng)把一個指針變量的地址值賦給另一個指針變量時,賦值號兩邊指針變量所指的數(shù)據(jù)類型必須相同。2f3ai的值2f3a第六章指針第一節(jié)指針與指針變量如:inti,*pi=&i;float*pf;pf=pi;/*這句是非法的*/4).用NULL給指針變量賦空值可以給指針變量賦空值,如:p=NULL;NULL是在Stdio.h頭文件中定義的預(yù)定義標(biāo)識符,因此在使用NULL時,應(yīng)該在程序中加上文件包含
6、#include“stdio.h”。在C語言中當(dāng)指針值為NULL時,指針不指向任何有效數(shù)據(jù)。由于NULL與整數(shù)0相對應(yīng),所以下面三條語句等價:p=NULL;或p=0;或p='\0';NULL可以賦值給指向任何類型的指針變量。第六章指針第一節(jié)指針與指針變量6.1.2指針運算符指針運算符“*”和取地址運算符“&”指針運算符“*”的運算對象必須放在指針運算符的右側(cè),是用來存取相應(yīng)的存儲單元中的數(shù)據(jù)。運算符&和*都是單目運算符,它們具有相同的優(yōu)先級,結(jié)合方向均為“從右到左”.例如:inti=123,j,*p;p=&i;則j=*p;和j=*&i;都將把變量i的值賦給變量j。而*p=456;和
7、*&i=456;都將把整數(shù)456賦給變量i。第六章指針第一節(jié)指針與指針變量所以:1.*&i等價于變量i.2.當(dāng)一個指針變量p指向某變量i時(p=&i;),則表達式*p與變量i等價。例如:p=&i;printf(”%d\n”,*p)/*相當(dāng)于printf(”%d\n”,i);*/j=(*p)++;/*相當(dāng)于j=i十十;*/注意表達式(*p)++中的括號不能省略,如果沒有括號,則*p++等價于*(p++),此時先使用變量i的值,再使p的值改變,這樣p就不再指向變量i了。第