- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
指位器与函式 - NCNU Moodle 课程
著作權所有 ? 旗標出版股份有限公司 第 12 章 指位器 (pointer) 本章提要 本章簡介 記憶體位址 指位器的基本用法 動態記憶體配置 (Dynamic Memery Allocation) 指位器與陣列 指位器與函式 雙重指位器 命令參數的引入:argc、argv 綜合演練 本章簡介 指位器 (pointer) 也是一種變數, 但是此種變數儲存的並非一般數值, 而是記憶體位址。當指位器變數所存的值是位址時, 我們稱此指位器指向該位址所表示的記憶體空間。 指位器可以用來表示複雜的資料的結構, 或者有效率的存取陣列的資料。但是, 因為使用指位器的過程中, 會涉及許多記憶體位址與空間的概念, 造成不了解此種概念的讀者學習上的困難。 記憶體位址 指位器是專門用來存放記憶體位址的變數。 何謂位址? 我們可以把記憶體的內部, 想像成一個一個排列整齊可用來裝填資料的小格子, 每個小格子的大小都相等 (1 byte)。而位址就是用來區別這些小格子, 也就是這些格子的『地址』。 記憶體位址 我們可以利用 算符, 找出變數在記憶體中被配置的位址, 語法如下: 在任何變數名稱前加上 算符後, 就表示該變數在記憶體中的位址, 而不是變數值。利用 printf ( ) 配合輸出格式 %p, 就可以輸出以 16 進位數值表示的記憶體位址, 如下: 記憶體位址 記憶體位址 因為 4 個變數都是整數型別, 所以在記憶體中各佔 4 bytes。在記憶體中, 每個 byte 都有獨立的位址, 以代表該空間在記憶體中的位置。 記憶體位址 如下圖: 指位器的基本用法 指位器的運用, 主要是在一種稱為『指向』的觀念。當指位器中儲存著一個變數的位址時, 我們稱此指位器指向該變數。 宣告的語法如下: 指位器的基本用法 資料型別:指位器的型別, 必須與該指位器所指向的變數型別相同。 *:稱為『間接』算符 (indirection), 意指指示器存放的是儲存變數的位址, 不能直接取得變數的值, 必須在指位器上使用間接算符才能取得變數值。宣告指位器變數時, 需在變數名稱前加上此算符。 指位器:也就是指位器變數的名稱, 命名的原則和一般變數相同。 指位器的基本用法 比如說: 如此一來, ptr 便是指向 number 的指位器了。 指位器的基本用法 指位器的空間大小 設定指位器的值 指位器的轉型 指位器的運算 使用指位器的好處 指位器的空間大小 由於指位器記錄的是記憶體位址, 所以不管指位器宣告成何種型別, 在記憶體中都會配置相同的空間 (4 bytes), 我們可以利用 sizeof ( ) 來驗證, 如下: 指位器的空間大小 指位器的空間大小 第 10~14 行, 將各種型別指位器的容量, 利用 sizeof 計算出來, 然後從螢幕輸出。 設定指位器的值 指位器也是一個變數, 所以和變數一樣可以設定其值。如果我們將指位器採用與變數相同的設定方式, 如下: 設定指位器的值 由於 ptr 本身未被設定初始值, 所以其值有可能是任何數值, 換言之, ptr 可能指向任何的記憶體空間, 例如其它程式、甚至作業系統正在使用的記憶體空間。此時若將數值 35 指定到此不知位於何處的記憶體空間, 有可能導致程式執行發生錯誤。所以, 指位器不能使用上述的方法來設定其值。 當我們要將數值指定給指位器時, 我們需要以下面的步驟來完成: 設定指位器的值 事先宣告一個同型別的變數, 再讓指位器指向此變數位址: 完成上述指定動作之後, 就可以利用 * 算符, 從指位器中取出數值。也就是說 *ptr 的值會等於 10。 設定指位器的值 上面步驟完成後, 指位器與變數間的關係如下圖: 我們先宣告 3 種不同型別的指位器, 讓其分別指向 3 個變數, 然後輸出其值。如下: 設定指位器的值 指位器的轉型 指位器只能指向同型別的變數位址, 絕對不能有如下的情形: 若想將指位器指向不特定型別的變數, 可使用 void 這個特殊的型別來宣告指位器變數。void 型別的指位器可指向任何型別, 編譯器不會發出警告。 指位器的轉型 但要取用指位器所指的變數值時, 必須做強制型別轉換才能取出正確的值: 例如下面的範例程式, 就宣告了 2 個 void 型別的指位器, 並分別指向整數和浮點數變數, 而在算式中要用指位器參與計算時, 就要先做強制型別轉換: 指位器的轉型 指位器的轉型 如執行結果所示, void 型別的指位器, 只要做適當的強制型別轉換, 程式就能以正確的型別來取用指位器所指的變數。 指位器的運算 因為指位器內儲存的是位址, 所以對指位器做加減, 就等於是將所存的位址做加減, 所得到的將 會是鄰近 的位址。 如以下範 例:
您可能关注的文档
最近下载
- 发电机空载特性曲线测录试验报告.pdf VIP
- 济南版八年级下册生物教案全册.doc VIP
- 医学课件-《中国老年骨质疏松症诊疗指南(2025)》.pptx
- 6.2《学会依法办事》教学设计 2025-2026学年统编版道德与法治 八年级上册 .docx VIP
- GJ B 5881-2006 技术文件版本标识及管理要求.pdf VIP
- 剑阁县清江河桅杆水电站增效扩容工程环境影响报告.docx VIP
- GJ B 5873-2006 模压硫化橡胶线性收缩率的测定.pdf VIP
- 国家及行业标准-G-J-B 5882-2006.pdf VIP
- G-J-B 5186.6-2005 数字式时分制指令响应型多路传输数据总线测试方法 第6部分.pdf VIP
- 肾上腺疾病的外科治疗课件.ppt VIP
有哪些信誉好的足球投注网站
文档评论(0)