




已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
指針的概念 指針變量 指針與數(shù)組 指針與函數(shù) 返回指針值的函數(shù) 前言 C程序設計中使用指針可以 使程序簡潔 緊湊 高效有效地表示復雜的數(shù)據(jù)結構動態(tài)分配內存得到多于一個的函數(shù)返回值 指針的概念 變量與地址 程序中 inti floatk 內存中每個字節(jié)有一個編號 地址 i k 編譯或函數(shù)調用時為其分配內存單元 變量是對程序中數(shù)據(jù)存儲空間的抽象 指針 一個變量的地址指針變量 專門存放變量地址的變量叫 2000 指針 指針變量 變量的內容 變量的地址 指針與指針變量 與 運算符 含義 含義 取變量的地址單目運算符優(yōu)先級 2結合性 自右向左 含義 取指針所指向變量的內容單目運算符優(yōu)先級 2結合性 自右向左 兩者關系 互為逆運算理解 i pointer 指針變量 它的內容是地址量 i pointer 指針的目標變量 它的內容是數(shù)據(jù) i pointer 指針變量占用內存的地址 i pointer i i pointer i i pointer i i pointer i i pointer i i pointer i 直接訪問與間接訪問 直接訪問 按變量地址存取變量值間接訪問 通過存放變量地址的變量去訪問變量 例i 3 直接訪問 3 例 i pointer 20 間接訪問 20 例k i 直接訪問k i pointer 間接訪問 10 例k i k i pointer 例子圖解 2指針變量 指針變量與其所指向的變量之間的關系 指針變量的定義一般形式 存儲類型 數(shù)據(jù)類型 指針名 合法標識符 指針變量本身的存儲類型 指針的目標變量的數(shù)據(jù)類型 表示定義指針變量不是 運算符 例int p1 p2 float q staticchar name 注意 1 int p1 p2 與int p1 p2 2 指針變量名是p1 p2 不是 p1 p23 指針變量只能指向定義時所規(guī)定類型的變量4 指針變量定義后 變量值不確定 應用前必須先賦值 指針變量的初始化 一般形式 存儲類型 數(shù)據(jù)類型 指針名 初始地址值 賦給指針變量 不是賦給目標變量 例inti int p 變量必須已說明過類型應一致 例inti int p 用已初始化指針變量作初值 例main inti staticint p 不能用auto變量的地址去初始化static型指針 例main inti 10 int p p i printf d p 危險 例main inti 10 k int p p 指針變量必須先賦值 再使用 零指針 空指針 定義 指針變量值為零表示 int p 0 p指向地址為0的單元 系統(tǒng)保證該單元不作它用表示指針變量值沒有意義 defineNULL0int p NULL p NULL與未對p賦值不同用途 避免指針變量的非法引用在程序中常作為狀態(tài)比較 例int p while p NULL void 類型指針表示 void p 使用時要進行強制類型轉換 例char p1 void p2 p1 char p2 p2 void p1 表示不指定p是指向哪一種類型數(shù)據(jù)的指針變量 零指針與空類型指針 main int p1 p2 p a b scanf d d 運行結果 a 5 b 9max 9 min 5 5 2006 9 2008 2006 2008 2006 例輸入兩個數(shù) 并使其從大到小輸出 指針變量作為函數(shù)參數(shù) 地址傳遞 特點 共享內存 雙向 傳遞 swap intx inty inttemp temp x x y y temp main inta b scanf d d 例將數(shù)從大到小輸出 5 9 5 5 9 COPY 特點 共享內存 雙向 傳遞 swap intx inty inttemp temp x x y y temp main inta b scanf d d 例將數(shù)從大到小輸出 值傳遞 5 9 運行結果 5 9 指針變量作為函數(shù)參數(shù) 地址傳遞 swap int p1 int p2 intp p p1 p1 p2 p2 p main inta b int pointer 1 pointer 2 scanf d d 5 9 2000 2002 5 9 COPY 5 例將數(shù)從大到小輸出 swap int p1 int p2 intp p p1 p1 p2 p2 p main inta b int pointer 1 pointer 2 scanf d d 5 9 2000 2002 5 9 運行結果 9 5 地址傳遞 例將數(shù)從大到小輸出 1 指向數(shù)組元素的指針變量 3指針與數(shù)組 例intarray 10 int p p 數(shù)組名是表示數(shù)組首地址的地址常量 指針變量的賦值運算p 指針變量p2值 p1 不能把一個整數(shù) p 也不能把p的值 整型變量 如inti p p 1000 i p 指針變量與其指向的變量具有相同數(shù)據(jù)類型 指針的運算 p i p i d i為整型數(shù) d為p指向的變量所占字節(jié)數(shù) p p p i p i p i p i等若p1與p2指向同一數(shù)組 p1 p2 兩指針間元素個數(shù) p1 p2 dp1 p2無意義 例p指向float數(shù) 則p 1 p 1 4 例p指向int型數(shù)組 且p 則p 1指向a 1 例inta 10 int p 例inta 10 int p1 1 指針的算術運算 若p1和p2指向同一數(shù)組 則p1p2表示p1指的元素在后p1 p2表示p1與p2指向同一元素若p1與p2不指向同一數(shù)組 比較無意義p NULL或p NULL 指針變量的關系運算 變址運算符a i a i a i p i p i a i main inta 5 pa i for i 0 i 5 i a i i 1 pa a for i 0 i 5 i printf pa d d n i pa i for i 0 i 5 i printf a d d n i a i for i 0 i 5 i printf pa d d n i pa i for i 0 i 5 i printf a d d n i a i 例數(shù)組元素的引用方法 例inta 1 2 3 4 5 6 7 8 9 10 p a i 數(shù)組元素地址的正確表示 A a 1 B a C p D p i 數(shù)組名是地址常量p p a a a 1 a 2 例voidmain inta 5 8 7 6 2 7 3 inty p 輸出 56 6 例注意指針變量的運算 main inti p a 7 p a for i 0 i 7 i scanf d p printf n for i 0 i 7 i p printf d p p a 指針變量可以指到數(shù)組后的內存單元 例注意指針的當前值 數(shù)組名作函數(shù)參數(shù) 是地址傳遞數(shù)組名作函數(shù)參數(shù) 實參與形參的對應關系 數(shù)組名作函數(shù)參數(shù) 實參與形參均用數(shù)組 voidinv intx intn intt i j m n 1 2 for i 0 i m i j n 1 i t x i x i x j x j t main inti a 10 3 7 9 11 0 6 7 5 4 2 inv a 10 printf Thearrayhasbeenreverted n for i 0 i 10 i printf d a i printf n m 4 例將數(shù)組a中的n個整數(shù)按相反順序存放 1 voidinv int x intn intt p i j m n 1 2 i x j x n 1 p x m for i p i j t i i j j t main inti a 10 3 7 9 11 0 6 7 5 4 2 inv a 10 printf Thearrayhasbeenreverted n for i 0 i 10 i printf d a i printf n 實參用數(shù)組 形參用指針變量 例將數(shù)組a中的n個整數(shù)按相反順序存放 2 voidinv int x intn intt i j p m n 1 2 i x j x n 1 p x m for i p i j t i i j j t main inti a 10 p a for i 0 i 10 i p scanf d p p a inv p 10 printf Thearrayhasbeenreverted n for p a p a 10 p printf d p 實參與形參均用指針變量 例將數(shù)組a中的n個整數(shù)按相反順序存放 3 voidinv intx intn intt i j m n 1 2 for i 0 i m i j n 1 i t x i x i x j x j t main inti a 10 p a for i 0 i 10 i p scanf d p p a inv p 10 printf Thearrayhasbeenreverted n for p arr p arr 10 p printf d p 實參用指針變量 形參用數(shù)組 例將數(shù)組a中的n個整數(shù)按相反順序存放 4 int p與intq 10 數(shù)組名是指針 地址 常量p q p i是q i 的地址數(shù)組元素的表示方法 下標法和指針法 即若p q 則p i q i p i q i 形參數(shù)組實質上是指針變量 即intq int q在定義指針變量 不是形參 時 不能把int p寫成intp 系統(tǒng)只給p分配能保存一個指針值的內存區(qū) 一般2字節(jié) 而給q分配2 10字節(jié)的內存區(qū) 一級指針變量與一維數(shù)組的關系 4指針與字符串字符串表示形式用字符數(shù)組實現(xiàn) 例main charstring IloveChina printf s n string printf s n string 7 例main char string IloveChina printf s n string string 7 while string putchar string 0 首地址處的數(shù)據(jù)元素string 字符指針初始化 把字符串首地址賦給string char string string IloveChina string 0 用字符指針實現(xiàn) 字符串指針作函數(shù)參數(shù) 例用函數(shù)調用實現(xiàn)字符串復制 1 用字符數(shù)組作參數(shù) 2 用字符指針變量作參數(shù) voidcopy string charfrom charto inti 0 while from i 0 to i from i i to i 0 main chara Iamateacher charb Youareastudent printf string a s nstring b s n a b copy string a b printf nstring a s nstring b s n a b voidcopy string char from char to for from 0 from to to from to 0 main char a Iamateacher char b Youareastudent printf string a s nstring b s n a b copy string a b printf nstring a s nstring b s n a b 字符指針變量與字符數(shù)組 char cp 與charstr 20 str由若干元素組成 每個元素放一個字符 而cp中存放字符串首地址charstr 20 str IloveChina char cp cp IloveChina str是地址常量 cp是地址變量cp接受鍵入字符串時 必須先開辟存儲空間 例charstr 10 scanf s str 而char cp scanf s cp 改為 char cp str 10 cp str scanf s cp 字符串與數(shù)組關系 字符串用一維字符數(shù)組存放字符數(shù)組具有一維數(shù)組的所有特點數(shù)組名是指向數(shù)組首地址的地址常量數(shù)組元素的引用方法可用指針法和下標法數(shù)組名作函數(shù)參數(shù)是地址傳遞等區(qū)別存儲格式 字符串結束標志賦值方式與初始化輸入輸出方式 s c charstr Hello charstr Hello charstr H e l l o char cp Hello inta 1 2 3 4 5 int p 1 2 3 4 5 charstr 10 cp inta 10 p str Hello cp Hello a 1 2 3 4 5 p 1 2 3 4 5 scanf s str printf s str gets str puts str 多級指針 定義 指向指針的指針一級指針 指針變量中存放目標變量的地址 例int p1 int p2 inti 3 p2 二級指針 指針變量中存放一級指針變量的地址 例int p inti 3 p 一級指針 單級間接尋址 二級指針 一級指針 目標變量 二級間接尋址 定義形式 存儲類型 數(shù)據(jù)類型 指針名 如char p 例inti p p p是二級指針 不能用變量地址為其賦值 指針本身的存儲類型 最終目標變量的數(shù)據(jù)類型 p是p間接指向對象的地址 p是p間接指向對象的值 例inti 3 int p1 int p2
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年護士職業(yè)資格考試試題及答案
- 七下語文測試題及答案
- 水電材料合同協(xié)議書范本
- 文檔氫氣質量測量和化學監(jiān)督課件
- 2025年氫氧化亞鎳合作協(xié)議書
- 澳大利亞市場拓展:海外分公司注冊與運營管理合同
- 智能家居產(chǎn)品全國分銷網(wǎng)絡布局及市場開發(fā)合同
- 網(wǎng)絡游戲IP授權與衍生品制作合作協(xié)議
- 拼多多品牌店鋪綜合營銷策略執(zhí)行與合作合同
- 共享辦公空間戰(zhàn)略合作伙伴協(xié)議
- 立體幾何中球與幾何體的切接問題-高考數(shù)學復習重點題型歸納與方法總結(原卷版)
- 創(chuàng)業(yè)機會(大學生創(chuàng)新創(chuàng)業(yè)課件)
- DB35T 88-2022 伐區(qū)調查設計技術規(guī)程
- 蝸牛與黃鸝鳥(課件)人音版音樂二年級上冊
- 經(jīng)濟師考試旅游經(jīng)濟(中級)專業(yè)知識和實務試卷及解答參考
- 班級規(guī)章 創(chuàng)造和諧
- 2024全國高中數(shù)學聯(lián)賽山東賽區(qū)預賽試卷(含解析)
- 2024年中國家具電商行業(yè)市場競爭格局及投資方向研究報告(智研咨詢)
- 導數(shù)(30題)-2024年考前15天高考數(shù)學沖刺大題訓練(新高考)含答案
- 高層建筑一棟一冊消防安全檔案
- 創(chuàng)造性思維與創(chuàng)新方法智慧樹知到期末考試答案章節(jié)答案2024年大連理工大學
評論
0/150
提交評論