7.1地址與指針、指針變量_第1頁
7.1地址與指針、指針變量_第2頁
7.1地址與指針、指針變量_第3頁
7.1地址與指針、指針變量_第4頁
7.1地址與指針、指針變量_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、CONTENTS 目 錄提出問題 引入新課自主學習 明確考點案例分析 交流提升仿真演練 體驗探索提出問題 引入新課PART 011、如何訪問變量的值? 2、變量名、變量地址、變量的值三者在描述變量上有什么區(qū)別?3、內存單元的分配原則常根據(jù)什么進行分配的?提出問題 引入新課想一想自主學習 明確考點PART 021、地址的定義:存儲單元的編號,內存中的每一個字節(jié)都有一個編號,這個編號被稱為“地址”, 也就是該存儲單元地址。存儲單元:存放數(shù)據(jù)的存儲器。存儲單元的內容:變量的值。存儲單元的分配:對程序中定義的變量,編譯程序會根據(jù)變量的數(shù)據(jù)類型為它們分配合適的內存單元,這樣每個變量在內存中都會有相對固定

2、的位置。考點一:地址、指針、指針變量的基本概念例如:int a =1, b=2;float f1=1.1,f2=5.9 ;double d=13.24;char c1= A, c2= B;編號內容變量名2、指針的定義:變量的地址稱為變量的指針。指針就是地址,是記錄變量存儲單元位置或者說是反映變量地址的正整數(shù)。指針是一個大小固定為2個字節(jié)的變量,不管什么類型都是用于存放一個地址的信息。在上例中,假設變量a的指針是3000,則變量b的指針是3002,變量f1的指針是3004??键c一:地址、指針、指針變量的基本概念3、變量的訪問形式:“直接訪問”是通過變量名或地址訪問變量值的方式,即直接通過變量的指

3、針(地址)找到變量的存儲單元,從而對其中的值進行存取?!伴g接訪問”是指將變量i的地址事先存放在另一個變量中,然后通過該變量來找到變量i的地址,再進行訪問i變量的過程稱為。4、指針變量是指專門存放指針的變量,即專門存放變量地址的變量被稱為“指針變量”。指針變量雖然屬于變量的范疇,但不同于其他類型的變量。注:使用指針變量的目的并非針對存于其中的指針進行操作,而是為了通過這個指針對其指向的變量進行操作,通常把這種訪問也稱為“間接訪問”,如圖示??键c一:地址、指針、指針變量的基本概念所謂“指向”是通過地址來體現(xiàn)的。如果一個指針變量p包含另一個變量n的地址,那么,我們就稱p“指向”n。指針指針變量變量n

4、的值的值指針變量p變量n變量n的地址1、指針變量的定義格式: *;注意:該“*”號只是一個類型標識符,不是運算符,不要與后面的指針運算符混淆。 例: int *p1, *p2; 說明:1)指針變量的類型是定義時所規(guī)定指向變量的基類型,如p1、p2只能指向整型變量,不能指向實型和字符型變量。2) 指針變量的值表示的是它所指向變量的地址。若一個指針變量為0 (NULL),表示該指針為空,說明它沒有指向任何變量(存儲單元)??键c二:指針變量的使用考點二:指針變量的使用2、指針變量的賦值取地址運算符&將指針變量指向某個變量的賦值格式: = & ;說明:&為一元運算符,只作用于一

5、個操作數(shù),它返回操作數(shù)的地址。int *p , n=10 ;p=&n;表示把變量n的地址存入指針變量p,使p指向n。這里所說的地址是變量在內存中的位置,與變量的內容無關。&的作用是“取地址”, p=&n;的意義是“p接受n的地址”。假設變量n的值存放在內存位置6000處,賦值后p的地址值就是6000??键c二:指針變量的使用3、指針變量的引用指針運算符*作用:取指針所指向的存儲單元中的內容, *是&的補操作,它也是一元運算符,返回其操作數(shù)所指變量的值,即取指針所指向變量的值。 例: int i=100, *p1; p1=&i; printf(“%dn”,

6、*p1);語句實質是*p1=&i;則p1的輸出值就是100。4、*和&運算符*和&都一元運算符,具有互補操作。*和&這兩個運算符都是單目運算符,優(yōu)先級相同,均按從右至左的方向結合。如:int a,*;p=&a; 兩種組合運算形式:若有&*p;則它的含意是先進行*p的運算,就是變量a,再執(zhí)行&運算。因此,&*p與&a相同。若有*&p;語句,則先進行&a運算,得到a的地址,再進行*運算。即&a所指向的變量??键c三:二維數(shù)組元素的使用說明:說明:(1)指針變量中只能存放地址指針變量中只能存放地址(指針),

7、將一個整型變量(或任其他非地址類型的數(shù)據(jù))賦給一個指針變量是不允許的。如: int *p;p=300;(2)不同類型的指針不能互相賦值不同類型的指針不能互相賦值。例如,下列用法是錯誤的,因為m和p指向的數(shù)據(jù)類型不匹配 float m; int *p=&m,*q;(3)不能用尚未定義的變量給指針變量賦初值。例如,下列用法是錯誤的:float *p=&r; float r;(4)使用賦值語句賦值在程序執(zhí)行中,可以使用賦值語句為指針變量賦值。一般格式如下:指針變量=地址;例如:int m=196,*p,*q;p=&m; /* 將變量m的地址賦給指針變量p */q=p; /*

8、利用指針變量p為指針變量q賦值 */案例分析 交流提升PART 03【例1】從鍵盤輸入兩個整數(shù),按由大到小的順序輸出。#include void main() int *p1, *p2, a, b, t; /*定義整型指針變量與整型變量*/ scanf(%d%d, &a, &b); p1=&a; /*使指針變量p1指向整型變量a*/ p2=&b; /*使指針變量p2指向整型變量b*/ if(*p1 *p2) /*交換指針變量所指向的變量*/ t=*p1;*p1=*p2;*p2=t; printf(%d, %dn, a, b);【解析】在該程序中,當執(zhí)行賦值操作p

9、1 = &a和p2 = &b后,指針變量p1與p2分別指向了變量a與b。當引用指針變量*p1與*p2時,實際上就是表示取變量a與b的值。上例也可用下述方法進行:#include void main() int *p1, *p2, a, b, *t; scanf(%d%d, &a, &b); p1 = &a; p2 = &b; if(*p1*p2) /*交換指針變量的指向*/ t = p1; p1 = p2;p2 = t; printf(%d, %dn, *p1, *p2);仿真演練,體驗探索PART 041、設有定義:int n1=0,n2,*p

10、=&n2,*q=&n1;以下賦值語句中與n2=n1;語句等價的是( ) A)*p=*q;B)p=q;C)*p=&n1; D)p=*q;2、若有定義:int x=0, *p=&x;,則語句printf(%dn,*p);的輸出結果是( ) A)隨機值B)0 C)x的地址 D)p的地址3、有以下程序運行后的輸出結果是( ) main() int a=7,b=8,*p,*q,*r; p=&a;q=&b; r=p;p=q;q=r; printf(%d,%d,%d,%dn,*p,*q,a,b); A)8,7,8,7 B)7,8,7,8 C)8,7,7,8 D)7,8,8,7 思考:如果將r=p; p=q;q=r;換成*r=*p; *p=*q; *q=*r;時結果又是什么?4、已有定義:int i,a10,*p;,則合法的賦值語句是( ) A)p=100;B)p=a5;C)p=a2+2; D)p=a+2;5、有以下程序運行后的輸出結果是( )main() char str10=China,Beijing,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論