版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第6章指針6.1地址與指針
6.2指針變量
6.3一維數(shù)組的指針
6.4指針與字符串
6.1地?址?與?指?針
6.1.1地址
內(nèi)存是計(jì)算機(jī)的一個重要組成部分,它用于存放那些“正在”使用的數(shù)據(jù)和“正在”執(zhí)行的程序。內(nèi)存單元的基本單位是字節(jié)。為了方便對內(nèi)存的訪問,每一個內(nèi)存單元都有一個編號,這個編號就是內(nèi)存的地址。C程序中的每一個變量和每一個函數(shù),在內(nèi)存中都會對應(yīng)一定的內(nèi)存單元。
內(nèi)存單元中存放的數(shù)據(jù)即為內(nèi)存單元中的內(nèi)容。如圖6.1所示,2000單元中存放的數(shù)據(jù)是35,2001單元中存放的數(shù)據(jù)是40。圖6.1內(nèi)存示意圖在C程序的聲明部分,需要對程序中用到的變量進(jìn)行說明,如intx,y說明了兩個整型變量x和y。對于這些變量,C編譯程序在編譯時會在內(nèi)存中分配相應(yīng)的內(nèi)存單元,x和y實(shí)際上就是內(nèi)存單元的符號地址。
例如:在程序中如果有語句:
x=68;
y=x+3;
則計(jì)算機(jī)會在x單元中存入數(shù)據(jù)68,然后將x單元的數(shù)據(jù)68加上3后將結(jié)果71存入y單元。如圖6.2所示。圖6.2內(nèi)存的內(nèi)容說明:
(1)編譯程序會在內(nèi)存中選取空閑的單元分配給變量x和y,這里不妨假設(shè)x為2000單元,y為2002單元。
(2)在ANSIC中,一個整型變量占兩個字節(jié)。
C程序中的每一個函數(shù)經(jīng)過編譯后,生成的目標(biāo)代碼在內(nèi)存中是連續(xù)存放的,函數(shù)目標(biāo)代碼的起始地址稱作函數(shù)的首地址,也叫入口地址。
在C語言中,函數(shù)名代表著函數(shù)的入口地址。6.1.2指針
1.指針
在計(jì)算機(jī)中,對一個內(nèi)存單元的訪問是通過地址來實(shí)現(xiàn)的,即地址“指向”需要操作的內(nèi)存單元。因此在C語言中,把地址形象地稱為指針。
C語言中定義的變量在內(nèi)存中都對應(yīng)一定的內(nèi)存單元,也就是說對應(yīng)一個地址。變量對應(yīng)的地址稱作變量的指針。
所謂函數(shù)的指針就是函數(shù)的入口地址。
2.指針變量
在計(jì)算機(jī)中,地址也是用二進(jìn)制數(shù)表示的,地址本身也是數(shù)據(jù),所以地址也可以存放在另一個變量中。用來存放指針數(shù)據(jù)的變量叫做指針變量。
例如在某C程序中定義了一個變量a,假設(shè)a的地址是3005,可以定義一個變量pointer,用于存放a的地址3005。該pointer就是一個指針變量。
既可以定義一個指針變量用來存放變量的地址,也可以定義一個指針變量用來存放函數(shù)的入口地址。用來存放變量地址的指針變量稱為指向變量的指針變量,簡稱指針變量;用來存放函數(shù)入口地址的指針變量稱作指向函數(shù)的指針變量。有了指向變量的指針變量的概念,對變量的訪問就可以間接進(jìn)行。圖6.3是直接訪問和間接訪問的示意圖。圖6.3直接訪問和間接訪問的示意圖 6.2指針變量
6.2.1指針變量的定義
C語言規(guī)定程序中使用的變量必須先定義,指定其類型。編譯程序根據(jù)變量的類型分配內(nèi)存單元。指針變量是用來存放地址的,必須定義成“指針類型”。
指針變量定義的形式為
基類型*指針變量名
這里“基類型”表示指針變量所指向的變量的類型,“*”表示定義的是指針變量。例如:
int*pointer;定義了一個指針變量pointer,它是指向整型變量的,所以變量pointer只能用來存放整型變量的地址。再如:
float*p1,*p2;
定義了兩個指針變量p1和p2,它們是指向?qū)嵭妥兞康?,所以變量p1和p2只能用來存放實(shí)型變量的地址。6.2.2指針變量的使用
1.指針變量的賦值
可以給指針變量賦地址值,且地址值必須是基類型變量的。為此C語言提供了取地址運(yùn)算符&,它的作用是取得變量所占用的存儲單元的首地址。
例如,語句“inta,*pointer;”之后,可以有語句:
pointer=&a;
該語句將變量a的地址值賦給指針變量pointer。注意變量a的類型和指針變量pointer的基類型必須一致。下面的定義和語句是錯誤的:
2.通過指針訪問變量
可以使用指針訪問它所指向的變量。C語言提供了指針運(yùn)算符(也稱為間接訪問運(yùn)算符),它的作用是通過指針變量間接訪問它所指向的變量。
【例6.1】
通過指針變量訪問變量。
程序如下:
間接訪問運(yùn)算符必須出現(xiàn)在運(yùn)算對象的左邊,運(yùn)算對象或者是地址或者是存放地址的指針變量。例如:
j=*(&i);
表達(dá)式?&i求出變量i的地址,間接訪問運(yùn)算符*取出地址中存放的內(nèi)容,然后賦給變量j。
運(yùn)算符?*?和?&?的優(yōu)先級相同,因此上例可以寫成:j=*&i。圖6.4例6.1的執(zhí)行結(jié)果圖6.5例6.2的運(yùn)行結(jié)果程序說明:scanf("%d,%d",px,py);為x和y輸入時,在變量px、py前不再使用運(yùn)算符&。
【例6.3】
注意&運(yùn)算符和*運(yùn)算符混合使用的情況。
程序如下:程序的執(zhí)行結(jié)果如圖6.6所示。
如圖6.7所示:圖(a)是執(zhí)行了語句“px=&x;”和“py=&y;”時的情況,圖(b)是執(zhí)行了語句“py=&*px;”的情況??梢钥闯?,當(dāng)執(zhí)行px=&x后,*px和?*&x是相同的,都是和變量x等同的,&x表示取x的地址,再加上?*?表示取這個地址的內(nèi)容,即x的值,執(zhí)行z=*&x后,z取得x的值。圖6.6例6.3的運(yùn)行結(jié)果
圖6.7&和*混合使用圖6.8例6.4的運(yùn)行結(jié)果圖6.9例6.5的運(yùn)行結(jié)果程序說明:a和b的內(nèi)容并沒有交換,通過指針的交換實(shí)現(xiàn)了數(shù)據(jù)的先大后小輸出。交換前指針的情況如圖6.10(a),交換后的指針情況如圖6.10(b)。圖6.10指針交換前后的情況
6.3一維數(shù)組的指針
6.3.1指向數(shù)組的指針變量
類似于指向簡單變量的指針,只要將數(shù)組的首地址(或數(shù)組名)賦給指針變量,該指針就稱為指向數(shù)組的指針變量。例如:
inta[10];
int*p;
則語句:
p=&a[10];(或p=a;)
使p指針成為指向數(shù)組a的指針變量。6.3.2一維數(shù)組的指針
指針變量既然可以指向變量,當(dāng)然也可指向數(shù)組和數(shù)組元素。一維數(shù)組的指針指向數(shù)組在內(nèi)存中的起始地址,一維數(shù)組元素的指針指向數(shù)組元素在內(nèi)存中的起始地址。如果指針變量p就是指數(shù)組a的指針變量,則對數(shù)組的引用可以用a[i]、p[i]、*(a+i)、*(p+i)等(i為相應(yīng)數(shù)組元素的下標(biāo))。
【例6.6】
輸出數(shù)組元素的三種方法。
(1)通過數(shù)組名。
由于數(shù)組名就是數(shù)組的首地址,所以可以通過數(shù)組名輸出數(shù)組元素。
程序如下:圖6.11例6.6的運(yùn)行結(jié)果圖6.12例6.7的運(yùn)行結(jié)果 6.4指針與字符串
6.4.1指向字符串的指針變量
C語言對字符串常量是按字符數(shù)組處理的,在內(nèi)存中開辟了一個字符數(shù)組存放字符串常量,因此可以使用字符型指針變量指向字符串常量。例如
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 煤礦設(shè)備租賃合作合同協(xié)議樣本
- 解除合同協(xié)議的規(guī)定
- 電商供應(yīng)商合作合同
- 維修服務(wù)合同范本
- 2024年度五人合伙創(chuàng)辦環(huán)??萍加邢薰竞贤?篇
- 2024年生物科技公司基因檢測技術(shù)轉(zhuǎn)讓合同
- 2024年塔吊司機(jī)承包高空作業(yè)設(shè)備操作人員勞務(wù)合同3篇
- 2024年標(biāo)準(zhǔn)化物流服務(wù)合作合同模板版B版
- 2024年度魚塘水質(zhì)監(jiān)測與治理合同3篇
- 2024版第二實(shí)驗(yàn)小學(xué)學(xué)生保險(xiǎn)及意外傷害理賠服務(wù)合同3篇
- 舞蹈演出編導(dǎo)排練合同模板
- 路燈安裝工程項(xiàng)目實(shí)施重點(diǎn)、難點(diǎn)和解決方案
- 2024年產(chǎn)品技術(shù)秘密保護(hù)協(xié)議版B版
- 社會學(xué)概論-第一次形成性考核-國開(SC)-參考資料
- 南京審計(jì)大學(xué)《計(jì)量經(jīng)濟(jì)學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024-2025學(xué)年廣東省深圳市羅湖區(qū)翠園中學(xué)九年級(上)期中語文試卷
- 新媒體營銷對企業(yè)品牌傳播的影響與對策8700字【論文】
- 期末測試-2024-2025學(xué)年語文六年級上冊統(tǒng)編版
- 【MOOC】線性代數(shù)-同濟(jì)大學(xué) 中國大學(xué)慕課MOOC答案
- 大美勞動智慧樹知到期末考試答案章節(jié)答案2024年江西財(cái)經(jīng)大學(xué)
- 蔣詩萌小品《誰殺死了周日》臺詞完整版
評論
0/150
提交評論