第十章 指標.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

計算機程式語言實習課.
第七章 副程式.
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
Chapter 5 遞迴 資料結構導論 - C語言實作.
第十一章 結構.
Visual C++ introduction
第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 指定字串的初值 8-3 指標與字串 8-4 字串處理 8-5 C語言的字串函數.
2 C++ 程式概論 2.1 C++ 程式結構 程式註解 // 插入標題檔 #include 2-3
列舉(enum).
【變數與記憶體位址】 變數(Variable)提供一個有名稱的記憶體儲存空間。一個變數包含資料型態、變數本身的值及它的位址值。
String C語言-字串.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
C語言簡介 日期 : 2018/12/2.
SQL Stored Procedure SQL 預存程序.
CLASS 5 指標.
Chapter 7 指標.
指標 林錦財.
(Circular Linked Lists)
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
Pointers Data Structure 補充單元 2019/1/1.
第七章 檔案處理.
第3章 指標與字串 (Pointers and Strings)
Introduction to the C Programming Language
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
Introduction to the C Programming Language
Introduction to the C Programming Language
程式設計實習課(四) ----C 函數運用----
第一單元 建立java 程式.
第7章 陣列與指標 7-1 陣列的基礎 7-2 一維陣列的處理 7-3 二維與多維陣列的處理 7-4 陣列的函數參數
JAVA 程式設計 資訊管理系 - 網路組.
輸入&輸出 函數 P20~P21.
第九章 字串.
C语言复习3----指针.
CH1 我的第一個App與變數宣告.
Introduction to the C Programming Language
CH05. 選擇敘述.
GUI Title and GUI Status
第7章 指標 7-1 指標的基礎 7-2 指標變數的使用 7-3 指標運算 7-4 指標與陣列 7-5 指向函數的指標.
挑戰C++程式語言 ──第8章 進一步談字元與字串
Pointer 指標 授課老師:蕭志明.
指標
C qsort.
挑戰C++程式語言 ──第7章 輸入與輸出.
MiRanda Java Interface v1.0的使用方法
Introduction to the C Programming Language
第14章 結構與其他資料形式.
陣列與結構.
指標 (pointer) 是一種特別的資料型態,用來儲存某一資料在記憶體內的位址。
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
實習八 函式指標.
期末報告第一題 通訊四甲 B 湯智瑋.
查表法&電腦IO Port二進制轉七段顯示器
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
作業系統實習課(二) -Scheduler-Related System Calls-
Introduction to the C Programming Language
Programming & Language Telling the computer what to do
Introduction to the C Programming Language
Introduction to the C Programming Language
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
C语言基础学习 从外行到入门.
微 處 理 機 專 題 – 8051 C語言程式設計 主題:階乘計算
Introduction to the C Programming Language
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

第十章 指標

10-1 指標的基本概念 何謂指標(pointer) 『&』與『*』是指標中最常見的兩種運算符號 指標在C語言中代表一種變數 用來存取記憶體位址,可能是字元,可能是整數型態,也可能為指標本身變數的位址。 藉由指標,程式可間接取得該指標所指位址的變數值。 『&』與『*』是指標中最常見的兩種運算符號 『&』:取得位址運算符號 用來取得該變數在記憶體中的位址。 『*』 :間接定址運算符號 用來取得該指標所指向變數(位址)的內容值。

『&』運算符號的使用方法 int x = 8, *ptr; /* x是一個整數變數,而*ptr 是指向整數變數的內容值*/ 位址 內容值 1268 8 x (1) 整數變數x = 8 ptr (2)‘&’用來取得x在記憶體中的位址

『*』運算符號的使用方法 int x = 8; ptr = &x; y = *ptr; /* 符號*用來取得該指標所指向 變數(位址)的內容值 = 8 */ 位址:1268 8 (1) (2) 1268 y *ptr x

範例 Ch10_1 (1/2) Ch10_1 『&』與『*』基本搭配運用 1 #include<stdio.h> 2 void main( ) 3 { 4 int x = 15; 5 int *ptr; /*宣告ptr是一個指向整數變數的指標*/ 6 ptr = &x; /*以&取得x的位址,然後設定給ptr */ 7 printf("ptr = %p, *ptr = %d\n", ptr, *ptr); 8 printf("&x = %p, x = %d\n", &x, x); 9 }

Ch10_1 輸出結果 (2/2) 程式執行結果 圖解說明 ptr = FFF4, *ptr = 15 &x = FFF4, x =15

10-1-2 指標與位址 指標與位址間基本之運用 以傳值呼叫(Call by value)為例,來說明指標如何來傳遞資料 傳值呼叫特色在於主程式呼叫副程式時,主程式之實際參數串列的值,傳給對應的副程式形式參數串列。 副程式執行時,作業系統額外分配記憶體位置給副程式的參數串列。副程式執行完畢,主程式的參數值不變。

範例 Ch10_2(1/4) Ch10_2 傳址法的應用 1 #include<stdio.h> 2 int func(int *, int *); 3 void main( ) 4 { 5 int x = 5, y = 10, z; 6 z = func(&x, &y); /* 呼叫函數func( )傳入x與y的 位址值,將傳回值給z */ 7 printf("x = %d &x = %d\n", x, &x); 8 printf("y = %d &y = %d\n", y, &y); 9 printf("z = x + y = %d &z = %d\n", z, &z); 10 }

範例 Ch10_2 (2/4) 11 int func(int *m, int *n) /*將x的位址給m指標來指向, 而y的位址給n指標來指向 */ 12 { 13 int r; 14 r = *m + *n; 15 printf("*m = %d n = %d\n", *m, m); 16 printf("*n = %d n = %d\n", *n, n); 17 printf(“r = x + y = %d &r = %d\n", r, &r); 18 return(r); 19 }

Ch10_2 輸出結果 (3/4) 程式執行結果 *m = 5 m = 1245052 *n = 10 n = 1245048 r = x + y = 15 &r = 1244948 x = 5 &x = 1245052 y = 10 &y = 1245048 z = x + y = 15 &z = 1245044

Ch10_2 輸出結果 (4/4) 圖解說明 副程式 主程式 5 10 15 x + y x y z *m *n r 位址:1244948 位址:1245044 位址:1245048 位址:1245052 副程式 主程式 5 10 15 x + y x y z *m *n r

10-2 雙重指標 何謂雙重指標 雙重指標又可以稱做指標中的指標 表示方式為: **ptr int x = 8; int *ptr1; int **ptr2; /* ptr2就是所謂的雙重指標表示方式*/ ptr1 = &x; ptr2 = &ptr1; x 位址:100 位址:300 位址:200 (1) (2) ptr1 ptr2 位址200 位址300 8

範例 Ch10_3 (1/2) Ch10_3 雙重指標應用 1 #include<stdio.h> 2 void main( ) 3 { 4 int i = 5; 5 int *p1; 6 int **p2; 7 p1 = &i; /*指標p1指向i的位址*/ 8 p2 = &p1; /*雙指標p2指向指標p1的位址 */ 9 printf(“i = %d &i = %d\n", i, &i); 10 printf("*p1 = %d p1 = %d\n", *p1, p1); 11 printf("**p2 = %d *p2 = %d\n", **p2, *p2); 12 printf("p2 = %p &p1 = %p\n", p2, &p1); 13 }

Ch10_3 輸出結果 (2/2) 程式執行結果 i = 5 &i = 1245052 *p1 = 5 p1 = 1245052 p2 = 0012FF78 &p1 = 0012FF78

10-5 指標運算 指標用途很廣泛,它可以使用運算子『*』來做運算,假設ptr為一指標變數,如下所示: 另外,指標運算也可以使用下面的兩種方式來表示: *(ptr + i) /*表示ptr指向的位址再往後位移i個元素的值*/ *ptr++ /*表示先取得ptr所指向位址的內容值, 然後再將ptr指標指向下一 個元素 */ *++ptr /*表示先將指標指向下一個元素,然後 再取得ptr所指向位址的內容值 */

範例 Ch10_11 (1/2) 1 #include<stdio.h> 2 void main( ) 3 { 3 { 4 char str[ ]="Taiwan University"; 5 printf("The string's length is %d\n", strlen(str)); 6 } 7 int strlen(char *str) 8 { 9 char *ptr; 10 ptr = str; /* 將str的起始字元的位址給指標ptr來指 */ while(*++ptr); /* *++ptr會先讓指標ptr指向下一個字元, 再取該字元的內容值 */ 12 return (ptr-str); /* 傳回ptr和str的差值,即為字串的長度 */ 13 }

Ch10_11 輸出結果 (2/2) 程式執行結果 The string’s length is 17