P. 1 Pointer( 指標 ) o 指標的宣告及給值 宣告 : 型態 * 指標變數名稱 給值 : 指標變數 = 一般變數位址 宣告時給值 : 型態 * 指標變數 = 一般變數位址 #include void main() { int a=5; int *p; int *q=&a; p=&a; printf(“a=%d.

Slides:



Advertisements
Similar presentations
6-1 指標簡介 6-2 指標與陣列 6-3 動態配置記憶體 6-4 本章綜合練習
Advertisements

布林代數的應用--- 全及項(最小項)和全或項(最大項)展開式
Introduction to Java Programming Lecture 13 Classes I OO Programming.
第七章 抽樣與抽樣分配 蒐集統計資料最常見的方式是抽查。這 牽涉到兩個問題: 抽出的樣本是否具有代表性?是否能反應出母體的特徵?
學習C++的基本語法 認識關鍵字與識別字的不同 學習程式碼偵錯的流程 學習如何提高程式的可讀性
Mathcad 基本認識 再mathcad中等於(=)的符號有區分為三種: 第一種:冒號等於(:=)是代表我們要定義ㄧ個參數
: A-Sequence 星級 : ★★☆☆☆ 題組: Online-judge.uva.es PROBLEM SET Volume CIX 題號: Problem D : A-Sequence 解題者:薛祖淵 解題日期: 2006 年 2 月 21 日 題意:一開始先輸入一個.
Reference, primitive, call by XXX 必也正名乎 誌謝 : 部份文字取於前輩 TAHO 的文章.
P. 1 Array ( 陣列 ) o 一、二維數值陣列的宣告與給值 #include void main() { int a[3]; int b[3]={22,34,56}; for (int i=0;i
What is static?. Static? 靜態 ? class Test { static int staticX; int instanceX; public Test(int var1, int var2) { this.staticX = var1; this.instanceX =
Reference, primitive, call by XXX 必也正名乎 誌謝 : 部份文字取於前輩 TAHO 的文章 CS340100, NTHU Yoshi.
: OPENING DOORS ? 題組: Problem Set Archive with Online Judge 題號: 10606: OPENING DOORS 解題者:侯沛彣 解題日期: 2006 年 6 月 11 日 題意: - 某間學校有 N 個學生,每個學生都有自己的衣物櫃.
第一章 變數、常數及資料型態. 變數 C 程式語言的變數名稱 第一個字必須是英文字母或底線 (_) 之後可以是數字, 英文字母或底線 (_) 不可以是保留字 例: Num (Ο) _score (Ο) C&C (X) 8num (X)
: ShellSort ★★☆☆☆ 題組: Problem D 題號: 10152: ShellSort 解題者:林一帆 解題日期: 2006 年 4 月 10 日 題意:烏龜王國的烏龜總是一隻一隻疊在一起。唯一改變烏龜位置 的方法為:一隻烏龜爬出他原來的位置,然後往上爬到最上方。給 你一堆烏龜原來排列的順序,以及我們想要的烏龜的排列順序,你.
消費者物價指數反映生活成本。當消費者物價指數上升時,一般家庭需要花費更多的金錢才能維持相同的生活水準。經濟學家用物價膨脹(inflation)來描述一般物價持續上升的現象,而物價膨脹率(inflation rate)為物價水準的變動百分比。
: Matrix Decompressing ★★★★☆ 題組: Contest Volumes with Online Judge 題號: 11082: Matrix Decompressing 解題者:蔡權昱、劉洙愷 解題日期: 2008 年 4 月 18 日 題意:假設有一矩陣 R*C,
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
JAVA 程式設計與資料結構 第十四章 Linked List. Introduction Linked List 的結構就是將物件排成一列, 有點像是 Array ,但是我們卻無法直接經 由 index 得到其中的物件 在 Linked List 中,每一個點我們稱之為 node ,第一個 node.
第 18 章 名稱空間與例外處理 18-1 名稱空間 18-1 名稱空間 18-2 例外處理 18-2 例外處理.
第三章 變數與繫結 陳維魁 博士 儒林圖書公司. 2 大綱  變數的定義  變數元件  儲存區配置問題  參考的透明性  完全計算  捷徑計算  繫結 (binding)  繫結時間  精選習題.
程式註解說明. 2 程式註解格式 塊狀註解 對檔案、 class 、 method 、資料結構、一段程式 …. 等程式區塊 做說明。 第一行的開頭必需為 “/*” 且沒有其他文字,最後一行的開頭 必需以 “*/” 做為結束,在中間每一行的開頭都必需是一個 “*” 。 單行註解 佔據一整行的說明。 以.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
第一章 演算法:效率、分析與量級 1.1演算法 1.2發展有效率演算法的重要性 1.3演算法的分析 1.4量級(Order)
JAVA 程式設計與資料結構 第十章 GUI Introdution III. File Chooser  File Chooser 是一個選擇檔案的圖形介面, 無論我們是要存檔還是要開啟檔案,使 用這個物件都會讓我們覺得容易且舒適。
第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍 7-4 VB.NET 常用的內建函數 7-4 VB.NET 常用的內建函數 7-5 遞迴函數 7-5.
Introduction to pointers in C/C++. Pointers 特殊變數 存放變數在記憶體中的位址 MinGW C++ 中佔用 4 bytes 間接定址取執法 位址 指標變數 變數內容 變數.
Introduction to Java Programming Lecture 17 Abstract Classes & Interfaces.
:Problem D: Bit-wise Sequence ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10232: Problem D: Bit-wise Sequence 解題者:李濟宇 解題日期: 2006 年 4 月 16.
第九章 結構. 結構的宣告 結構 它是由許多不同 ( 或相同 ) 資料型態的變數所組成的 集合,通常利用結構標籤稱呼此集合 struct student { char *name; int score; }; struct 為保留字,表示結構的宣告開始 結構項目需定義於大括號「 { } 」內 結尾需加上分號.
: The largest Clique ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11324: The largest Clique 解題者:李重儀 解題日期: 2008 年 11 月 24 日 題意: 簡單來說,給你一個 directed.
7 陣列與搜尋 7.1 陣列 一般資料變數 宣告一維陣列 起始一維陣列 7-4
: Tight words ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: : Tight Words 解題者:鐘緯駿、林一帆 解題日期: 2006 年 03 月 14 日 題意: 給定數字 k 與 n (0 ≦ k.
: Fast and Easy Data Compressor ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10043: Fast and Easy Data Compressor 解題者:葉貫中 解題日期: 2007 年 3.
第十章 再論結構. 指標與結構的關係 /* File name: ex10-1a.c */ #include int main() { struct student { char *name; int score; }; struct student st= {"Brian", 97}; struct.
: Ahoy, Pirates! ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11402: Ahoy, Pirates! 解題者:李重儀 解題日期: 2008 年 8 月 26 日 題意:有一個海盜島有 N 個海盜,他們的編號 (id)
: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義.
資料結構實習-一 參數傳遞.
第六章 陣列.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
: A-Sequence ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10930: A-Sequence 解題者:陳盈村 解題日期: 2008 年 5 月 30 日 題意: A-Sequence 需符合以下的條件, 1 ≤ a.
: Beautiful Numbers ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11472: Beautiful Numbers 解題者:邱經達 解題日期: 2011 年 5 月 5 日 題意: 若一個 N 進位的數用到該.
A[0] a[1] pa ???? *pa ppa *ppa Address:4 byte Double:8 byte.
函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷. 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果.
JAVA 程式設計與資料結構 第二十章 Searching. Sequential Searching Sequential Searching 是最簡單的一種搜尋法,此演 算法可應用在 Array 或是 Linked List 此等資料結構。 Sequential Searching 的 worst-case.
Pointer and Array 指標 與 陣列 double *a, b[10]; char name[80], *np;
Windows Processing Design1 Chapter 1 C/C++ 概論 畫面輸出與鍵盤輸入 程式流程 程式流程的迴圈 函數的基礎 指標與陣列 字串 類別 利用 BCB 開發程式.
845: Gas Station Numbers ★★★ 題組: Problem Set Archive with Online Judge 題號: 845: Gas Station Numbers. 解題者:張維珊 解題日期: 2006 年 2 月 題意: 將輸入的數字,經過重新排列組合或旋轉數字,得到比原先的數字大,
第 17 章 樣板 17-1 樣板的基礎 17-1 樣板的基礎 17-2 樣板函數 17-2 樣板函數 17-3 樣板類別 17-3 樣板類別 17-4 非型態參數的樣板類別 17-4 非型態參數的樣板類別 17-5 樣板類別的繼承 17-5 樣板類別的繼承 17-6 特化樣板與靜態成員 17-6 特化樣板與靜態成員.
資料型態名稱用途儲存空間儲存值範圍 short 短整數儲存較小的 整數 2 bytes-32,768~32,767 Int 整數儲存整數 16 位元 : 2 bytes 32 位元 : 4 bytes 16 位元 : 32,768~32, 位元 : -2,147,483,648 ~ 2,147,483,647.
Chapter 10 m-way 搜尋樹與B-Tree
: Function Overloading ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11032:Function Overloading 解題者:許智祺 解題日期: 2007 年 5 月 8 日 題意:判對輸入之數字是否為.
本章重點 2-1 有序串列(Ordered List) 2-2 介紹陣列(array) 2-3 矩陣(matrix)的應用
Probability Distribution 機率分配 汪群超 12/12. 目的:產生具均等分配的數值 (Data) ,並以 『直方圖』的功能計算出數值在不同範圍內出現 的頻率,及繪製數值的分配圖,以反應出該 機率分配的特性。
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
第 6 章 迴圈結構 6-1 計數迴圈 6-1 計數迴圈 6-2 條件迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-3 巢狀迴圈 6-4 While/End While 迴圈 6-4 While/End While 迴圈 6-5 跳出迴圈 6-5 跳出迴圈 6-6 VB.NET 的錯誤處理 6-6 VB.NET.
連續隨機變數 連續變數:時間、分數、重量、……
函式 Function 東海大學物理系‧資訊教育 施奇廷. 函式簡介 當程式越來越大、越複雜時,程式的維護、 除錯會變得更困難,此時必須引入函式來 簡化程式或將程式分段,將程式重複的部 分改寫為函式,將程式「模組化」 這種作法有下列優點:節省程式發展的時 間、邏輯容易瞭解、程式容易除錯、可分 工合作完成程式.
Visual C++重點複習.
資料結構實習-六.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2008.
11 Ch05 遞迴 淡江大學 周清江 1. 2  遞迴函數乃是一個自己反覆呼叫自己的函數  一個典型的遞迴演算法 n! = n * (n-1)! = n * (n-1) * (n-2)! = n * (n-1) * (n-2) * (n-3)! = … = n * (n-1) * (n-2)
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
C 語言練習題 2010/12/2. C 程式的格式 一、 C 程式的格式 (1). /* …. */ 是 C 程式的 ______ main() 的內容是由敘述構成的 (2). 敘述要以 __ 為結束符號 (3). 變數、函數都要做 ____ 的宣告 (4). ‘=’ 是 ____ 用的算符 (5).
7.4 程式範例 在螢幕上寫出“Hello” 的程式 (參考 code/pep-p200.odc).
: Finding Paths in Grid ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11486: Finding Paths in Grid 解題者:李重儀 解題日期: 2008 年 10 月 14 日 題意:給一個 7 個 column.
6 使用者函數 6.1 函數定義 宣告函數 呼叫函數 呼叫多個函數 6-6
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2009.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
第 8 章 記憶體指標. 8.0 變數、數值、位址 8.1 指標與變數 對 C++ 語言而言,指標( pointers )是存放 變數或陣列的位址,因此也可以藉由指標 間接取得變數或陣列中的值。 對 C++ 語言而言,指標( pointers )是存放 變數或陣列的位址,因此也可以藉由指標 間接取得變數或陣列中的值。
Presentation transcript:

P. 1 Pointer( 指標 ) o 指標的宣告及給值 宣告 : 型態 * 指標變數名稱 給值 : 指標變數 = 一般變數位址 宣告時給值 : 型態 * 指標變數 = 一般變數位址 #include void main() { int a=5; int *p; int *q=&a; p=&a; printf(“a=%d \t %d \t %d \n”,a,*p,*q); /*5,5,5 */ } (1) 指標變數 p 內裝的是 a 的位址 (2) *p 表示 a 的內容 ( 值 ) 5 a p P : *p: 5 指標 (Pointer)

P. 2 Pointer( 指標 ) 指標與數值陣列 : #include void main() { int a[5]={1,3,5,7,9}; int *p,*q; int i; p=a; q=&a[0]; for (i=0;i<=4;i++) printf(“a=%d \t %d \t %d \t %d \n”,a[i],*(p+i),*(q+i),*(a+i)); // *p+1 與 *(p+1) 不同值 } a 表示 a[0] 的位址 a+1 表示 a[1] 的位址 p, a, &a[0] 均表示 a[0] 的位址 p+1, a+1, &a[1] 均表 a[1] 之值 *p, a[0], *a 均表 a[0] 之值 *(p+1), a[1], *(a+1) 均表 a[1] 之值

P. 3 Pointer( 指標 ) 指標與數值陣列 : #include void main() { int a[5]={1,3,5,7,9}; int *p,*q; int i; p=a; q=&a[0]; for (i=0;i<=4;i++) printf(“a=%d \t %d \t %d \t %d \n”,a[i],*(p+i),*(q+i),*(a+i)); // *p+1 與 *(p+1) 不同值 }

P. 4 Pointer( 指標 ) 指標與數值陣列 :( 利用指標輸入每日溫度並求平均值後印出 ) #include void main() { /* example for pointer and one dimentional integer array */ float temp[40]; int num,day=0; float sum=0.0; clrscr(); /* input temp array untial negative value */ do { printf("Enter temperature for day %d: ",day); scanf("%f",temp+day); } while ( *(temp+day++)>0) ; num=day-1; clrscr(); /* make sum for the array elements */ for (day=0;day<num;day++) sum+=*(temp+day); printf("average is: %.1f\n",sum/num); }

P. 5 Pointer( 指標 ) o 變數前加上 * 表示指向之意, 如 int *ip 表示 ip 之內容為一個整數變數之位址值。 o void 指標型別 : 所定義之 pointer 能用來指各種型別。 o pointer 本身也是變數, 也有自己的位址, 也可以讓一個 pointer 指向另一 pointer 。 void *p, *q; int i=36; double d=1.22; p=&i; q=&d; void *p, *q; int i=36; double d=1.22; p=&i; q=&d; int I=5, *p=&I; int *q=&p int I=5, *p=&I; int *q=&p i p 0020 q 0030 o 陣列與 pointer 的差異 : * 當我們定義陣列時,C 會配置一塊連續的記憶體位置給此陣列, 而陣列名稱即代表 這塊記憶體的起始位址, 我們不能更改它的值。 * 當我們定義一個 pointer 時,C 會配置一塊足以容納位址值的記憶體給它, 在使用 指標前一定要先存入適當的位址值, 來使其指向正確的記憶體位置, 所以我們可 以任意更改 pointer 的值。

P. 6 Pointer( 指標 ) #include void swap(int *first, int *second); void main() { int a=50,b=100; clrscr(); printf("a=%d b=%d\n",a,b); swap(&a,&b); printf("after swap \n"); printf("a=%d b=%d\n",a,b); } void swap(int *first, int *second) { int temp; temp=*first; *first=*second; *second=temp; } #include int maximul(int *ptr,int size); void main() { /* pointer and two dimentional integer array */ int a[3]={10,20,15}; int max; clrscr(); max=maximul(a,3); printf("the max value is:%d\n",max); } int maximul(int *ptr,int size) { int largest,i; for (largest=*ptr,i=0;i<size;i++) if (largest < *(ptr+i)) largest=*(ptr+i); return(largest); } 數值指標當副程式參數 : 呼叫時傳位址給指標變數

P. 7 Pointer( 指標 ) 數值指標當副程式參數 : 排序及二分搜尋法 #include void Sort(int *array,int array_size); void swap(int *first, int *second); int BSearch(int *array,int array_size,int goal); void pause(); void main() { int i,search; int a[]={2,6,4,8,10,12,89,68,45,37}; int *ptr=a; int size=sizeof(a)/sizeof(int); int position; char c; clrscr(); printf("Original data:\n"); for (i=0;i<size;i++) printf("%4d",*(ptr+i)); printf("\n"); Sort(a,size); printf("After sorting:\n"); for (i=0;i<size;i++) printf("%4d",*(ptr+i)); printf("\n"); pause(); while (1) { printf("Please input a number(negative to exit):"); scanf("%d",&search); if (search<0) break; position=BSearch(a,size,search); if (position==-1) printf("this data not found\n"); else printf("the %dth position is what you want\n",position); pause(); } clrscr(); gotoxy(20,20); printf("thank you for your use!"); }

P. 8 Pointer( 指標 ) void Sort(int *array, int array_size) { int i,j; for (i=0; i<array_size-1;i++) for (j=i;j<array_size;j++) if (*(array+i) > *(array+j)) swap(array+i,array+j); } void swap(int *first, int *second) { int temp; temp=*first; *first=*second; *second=temp; } void pause() { char c; gotoxy(20,20); printf("press any key to continue..."); c=getche(); clrscr(); } int BSearch(int *array, int array_size, int goal) { int *first=array,*last=array+array_size-1,*mid; while (first<=last) { mid=(int)((last-first)/2)+first; if (*mid==goal) return(mid-array); if (*mid>goal) last=mid-1; else first=mid+1; } return(-1); }

P. 9 Pointer( 指標 ) // page:7-7 傳值呼叫 #include void cubeByValue(int); void main() { int number=5; printf(“The original value of number is %d \n”, number); number=cubeByValue(number); printf(“The new value of number is %d \n”, number); } int cubeByValue(int n) { return n*n*n } 課本範例 : // page:7-8 傳址呼叫 #include void cubeByReference(int *); void main() { int number=5; printf(“The original value of number is %d \n”, number); number=cubeByReference(&number); printf(“The new value of number is %d \n”, number); } void cubeByReference(int *nptr) { *nptr =*nptr * *nptr * *nptr }

P. 10 Pointer( 指標 ) 指標與二維數值陣列的關係 #include void main() { /* pointer and two dimentional integer array */ int a[2][3]={{1,2,3},{4,5,6}}; int *ptr1,*ptr2; int i,j; clrscr(); ptr1=a[0]; ptr2=&a[0][0]; for (i=0;i<3;i++) printf("value of array a[0][%d] is %d,%d, or %d\n",i,*(ptr1+i),*(ptr2+i),a[0][i]); /* */ /* */ /* */ /***********************/ for (i=0;i<2;i++) for (j=0;j<3;j++) printf("array a[%d][%d]=%d or %d \n",i,j,*(ptr1+i*3+j),*(*(a+i)+j)); /* array[0][0]=1 or 1 */ /* array[0][1]=2 or 2 */ }

P. 11 Pointer( 指標 ) 指標與字串變數的關係 #include void main() { char a[6]="abcde"; char *p; p=a; printf("Original p is:%s \n",p); printf("Please input a string:"); scanf("%s",p); printf("The new value of p is:%s \n",p); } #include void main() { int i; char name[3][6]={"Johny","Mary","Lucy"}; char *p,*q=name[0]; clrscr(); p=name[0]; printf("0th person's name is:%s \n",p); printf("1th person's name is:%s \n",p+6); printf("please input 2th person's name:"); scanf("%s",p+12); for (i=0;i<3;i++) printf("%dth person's name is:%s \n",i,p+i*6); }

P. 12 Pointer( 指標 ) 指標與字串變數的關係 #include void main() { char str1[]=”defined as an array"; char *str2=“defined as a pointer”; char *str3; str3=“string3”; printf(”str1:%s\n",str1); printf(”str2:%s\n",str2); printf(“str3:%s\n”,str3); str2++; printf(”new str2:%s\n",str2); }

P. 13 Pointer( 指標 ) 指標與字串變數的關係 # include #define MAXNUM 30 #define MAXLEN 80 void main() { char name[MAXNUM][MAXLEN]; char *ptr=name[0],*temp; int count=0,i,j; clrscr(); while (count < MAXNUM) { printf("Name %d:",count); gets(name[count]); if (strlen(name[count])==0) break; count++; } count--; for (i=0;i<=count-1;i++) for (j=i+1;j<=count;j++) if (strcmp(ptr+i*MAXLEN,ptr+j*MAXLEN)>0) { strcpy(temp,ptr+i*MAXLEN); strcpy(ptr+i*MAXLEN,ptr+j*MAXLEN ); strcpy(ptr+j*MAXLEN,temp); } printf("The sorted list:\n"); for (i=0;i<=count;i++) printf("Name %d :%s \n",i,ptr+i*MAXLEN); }

P. 14 Pointer( 指標 ) #include /* char pointer as the parameter */ void add(char *p,char *q); void main() { char a[20]="Mr."; char b[20]=" Johny"; add(a,b); printf("contents of a is:%s\n",a); } void add(char *p,char *q) { p= strcat(p,q); } #include /* char pointer as the parameter */ void output(char *p); void main() { char a[20]="Johny"; output(a); } void output(char *p) { printf("content of a is:%s \n",p); } 字串指標當參數

P. 15 Pointer( 指標 ) 指標函數 #include char *getstr(); void main() { clrscr(); printf(“\n%s\n”,getstr()); } char *getstr() {char *p; printf(“please input a string:”); scanf(“%s”,p); return(p); } #include char *add(char *p1, char *p2); void main() { char *q1,*q2; q1=“abcde”; q2=“nopqrs”; q1=add(q1,q2); clrscr(); printf(“\n%s\n”,q1); } char *add(char *p1, char *p2) { return(strcat(p1,p2)); }

P. 16 Pointer( 指標 ) 指標函數的應用 ( 計算字串長度 ) #include int strlen(char *ptr); void main() { char string[100]; int len; printf("input a string:"); gets(string); len=strlen(string); printf("the length of input is: %d \n",len); } int strlen(char *ptr) { int i; for(i=0; ptr[i]!='\0';i++); // for(i=0; *(ptr+i)!='\0'; i++); return(i); } 指標函數的應用 ( 字串複製 ) #include int strlen(char *ptr); void main() { char string[100]; int len; printf("input a string:"); gets(string); len=strlen(string); printf("the length of input is: %d \n",len); } int strlen(char *ptr) { int i; for(i=0; ptr[i]!='\0';i++); // for(i=0; *(ptr+i)!='\0'; i++); return(i); } #include char *strcpy(char *str1,char *str2) { int i; for(i=0; str2[i]!='\0'; i++) str1[i]=str2[i]; str1[i]='\0'; return(str1); } void main() { char from[100]; char to[100]; printf("input source string:"); gets(from); strcpy(to,from); printf("the destination string:%s \n",to); }

P. 17 Pointer( 指標 ) 指標函數的應用 ( 字串連結 ) #include char *strcat(char *str1,char *str2); void main() { char first[100]; char second[100]; printf("input first string:"); gets(first); printf("input second string:"); gets(second); strcat(first,second); printf("the combination string:%s \n",first); } char *strcat(char *str1, char *str2) { int i,j; for(i=0; str1[i]!='\0'; i++); for(j=0; str2[j]!='\0'; j++) str1[i+j]=str2[j]; str1[i+j]='\0'; return(str1); }

P. 18 Pointer( 指標 ) 動態配置記憶體 (malloc) 與指標 指令格式 : 指標變數 =( 強迫轉型 ) malloc( 容量 ) 例 : int *ptr; ptr=(int *) malloc(sizeof(int)); #include void main() { int *ptr; ptr=(int *) malloc(sizeof(int)); if (!ptr) printf("out of memory... \n"); else { *ptr=64; printf("score is:%d \n",*ptr); } 整數資料 0010 ptr #include void main() { int *score; int i,num,sum; float avg; clrscr(); sum=0; printf("input number of students:"); scanf("%d",&num); score=(int *) malloc(num * sizeof(int)); for(i=0;i<num;i++) { printf("input %d's student's score:",i); scanf("%d",&score[i]); sum+=score[i]; } avg=(float) sum/num; printf("average is:%6.2f \n",avg); } 範例 :