C語言程序設(shè)計(jì) 劉明才 第8章 指針

C語言程序設(shè)計(jì) 劉明才 第8章 指針

ID:40238508

大?。?.00 MB

頁數(shù):80頁

時(shí)間:2019-07-28

C語言程序設(shè)計(jì) 劉明才 第8章 指針_第1頁
C語言程序設(shè)計(jì) 劉明才 第8章 指針_第2頁
C語言程序設(shè)計(jì) 劉明才 第8章 指針_第3頁
C語言程序設(shè)計(jì) 劉明才 第8章 指針_第4頁
C語言程序設(shè)計(jì) 劉明才 第8章 指針_第5頁
資源描述:

《C語言程序設(shè)計(jì) 劉明才 第8章 指針》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、第8章指針指針的基本概念指針與一維數(shù)組指針與二維數(shù)組指針與字符串指針與函數(shù)指針數(shù)組與多級(jí)指針第頁共79頁8.1指針的基本概念變量的地址及指針指針變量指針運(yùn)算指針作為函數(shù)的參數(shù)第頁共79頁8.1.1變量的地址及指針計(jì)算機(jī)的內(nèi)存是以字節(jié)為單位的一片連續(xù)的存儲(chǔ)區(qū)域,每一個(gè)字節(jié)都有一個(gè)編號(hào),這個(gè)編號(hào)稱為內(nèi)存地址(address)。就像旅館的每個(gè)房間都有一個(gè)房間號(hào)一樣,如果沒有房間號(hào),旅館的工作人員就無法進(jìn)行管理;同樣道理,沒有內(nèi)存字節(jié)的編號(hào),系統(tǒng)就無法對(duì)內(nèi)存進(jìn)行管理。第頁共79頁C語言中定義的每個(gè)變量都被分配了確定

2、的存儲(chǔ)區(qū)域,它們占一個(gè)或多個(gè)字節(jié),每個(gè)變量所占存儲(chǔ)區(qū)域第一個(gè)字節(jié)的地址稱為該變量的地址。存儲(chǔ)在變量中的內(nèi)容(即數(shù)據(jù))稱為變量的值。假設(shè)有如下程序:#includevoidmain(){inta=10;floatx=20.5;…}第頁共79頁在上面的程序中分別定義了int型變量a和float型變量x,變量所占的字節(jié)數(shù)由變量的類型決定,變量a占2個(gè)字節(jié),變量x占4個(gè)字節(jié)。假設(shè)編譯時(shí)系統(tǒng)分配地址為2000和2001的兩個(gè)字節(jié)給變量a,分配地址為2002~2005的4個(gè)字節(jié)給變量x,則變量a的地址

3、為2000,變量x的地址為2002。變量、內(nèi)容及地址示意圖,如圖所示。第頁共79頁變量、內(nèi)容及地址示意圖第頁共79頁8.1.2指針變量指針變量的定義指針變量定義的一般形式:類型標(biāo)識(shí)符*變量名;其中“類型標(biāo)識(shí)符”定義指針變量的類型,變量名前的“*”表示定義的變量是一個(gè)指針變量。例如:int*p1,*p2;定義了2個(gè)指針變量p1、p2,它們只能存放int型變量的地址。在定義指針變量時(shí)可以對(duì)其進(jìn)行初始化,例如對(duì)如圖所示的關(guān)系可定義如下:inta;int*p=&a;或inta,*pa=&a;上述語句的作用是定義in

4、t型變量a和指向int型數(shù)據(jù)的指針變量p(即p中只能存放int型變量的地址),同時(shí)給p賦值為變量a的地址。其中&a是取變量a的地址。第頁共79頁指針變量與變量間的指向關(guān)系第頁共79頁指針變量的引用指針變量的使用與兩個(gè)運(yùn)算符“&”、“*”有密切關(guān)系。(1)&:取地址運(yùn)算符,用于求變量在內(nèi)存中的地址,運(yùn)算符的操作對(duì)象必須是存儲(chǔ)單元(如變量、數(shù)組元素等)。(2)*:指針運(yùn)算符(或稱間接訪問運(yùn)算符),間接訪問指針變量指向的對(duì)象。運(yùn)算符的操作對(duì)象必須是指針。例如:inta=6,*pa;/*定義pa為指向int型數(shù)據(jù)的

5、指針變量*/pa=&a;/*將a的地址賦給pa*/*pa=28;/*將28賦給pa指向的變量a*/當(dāng)指針變量pa指向變量a時(shí),引用變量a可用*pa表示,即表示通過指針變量pa間接引用變量a。此時(shí)*pa與變量a表示的是同一個(gè)存儲(chǔ)單元,如果改變*pa的值就是改變了a的值。第頁共79頁【例】取地址運(yùn)算符&和指針運(yùn)算符*的簡單使用。程序如下:#includevoidmain(){inta=100,*pa;pa=&a;/*把變量a的地址賦給pa*/printf("a=%d,*pa=%d",a,*

6、pa);a=200;printf("a=%d,*pa=%d",a,*pa);}運(yùn)行結(jié)果如下:a=100,*pa=100a=200,*pa=200第頁共79頁使用指針應(yīng)注意的幾種情況在指針變量中只能存儲(chǔ)地址指針變量中存儲(chǔ)的地址,必須是已明確定義過的對(duì)象地址(如變量、數(shù)組等)。例如:inta,*p,*q;p=2000;/*不正確*/q=&a;/*正確*/其中p=2000是不正確的。初學(xué)者可能會(huì)想,這是把內(nèi)存中編號(hào)為2000的存儲(chǔ)單元地址賦值給變量p。但事實(shí)上程序運(yùn)行時(shí)所需存儲(chǔ)區(qū)域的具體分配不能由用戶指定,必

7、須由系統(tǒng)來管理分配。因此必須先定義對(duì)象,才能把對(duì)象的地址存儲(chǔ)到指針變量中。第頁共79頁初始化指針變量與用賦值表達(dá)式給指針變量賦值在表示方法上的區(qū)別語句“inta,*p=&a;”與“inta,*p;p=&a;”是等價(jià)的。它們都定義a是int型變量,定義變量p為指向int型數(shù)據(jù)的指針變量,并且使p指向a。但“inta,*p;*p=&a;”中的賦值語句是錯(cuò)誤的。錯(cuò)在把定義語句“int*p=&a”與賦值語句“*p=&a”混淆。在定義語句中變量名前的“*”是用于指明所定義的變量p是一個(gè)指針變量,&a值是存放到p中;而

8、賦值語句中變量名前的“*”是間接訪問運(yùn)算符,表示利用指針變量p,間接訪問它所指向的對(duì)象,&a值是存放到p指向的對(duì)象*p中。第頁共79頁懸掛指針指針變量的值不確定的指針稱為懸掛指針。在定義語句中如果沒有對(duì)指針變量p初始化,變量p中的地址值是不確定的,那么p就是懸掛指針。如果有int*p;即此時(shí)p是懸掛指針,語句“*p=56;”將如何執(zhí)行?不同版本的C語言處理系統(tǒng)可能對(duì)此將作不同處理;一種處理方式是編譯顯示出錯(cuò)信息;

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。