*****************************20090616 陳惠堂*********************************************
指標 pointer
- 裡面擺放的是位址, 不是擺放值
- 通常對付 大傢伙
- int *p;
*new 配置記憶體位址
語法
new 型別
new int;
傳送的方式
- Call By Value 傳值
- 只是換值(資料), 不是位址
- Call By Reference 傳參考
- 參考的是位址
- 放在接的地方,(例如 Function 內)
- Call By Address 傳址
- 直接給位址
Lab: Call by Value
// include 引入 .h (標頭檔)
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//進入主程式
int main()
{
int main()
{
int x,y;
//宣告 swap, 因為寫在 main的後面 所以要先宣告
void swap(int a, int b);
x=5;
y=7;
printf("Before swap\n");
printf("x=%d\ty=%d\n\n",x,y);
//呼叫 swap 將兩個互相調換
printf("Call swap\n");
swap(x,y);
printf("After swap\n");
printf("x=%d\ty=%d\n",x,y);
system("pause");
return 0;
}
}
//使用swap function 來互相調換
void swap(int a,int b)
{
int t;
t = a;
a = b;
b = t;
printf("a=%d\tb=%d\n\n",a,b);
}
Lab: Call by Reference
// include 引入 .h (標頭檔)
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//進入主程式
int main()
{
int main()
{
int x,y;
//宣告 swap, 因為寫在 main的後面 所以要先宣告
//宣告時使用 &a &b 所以是 Call by Reference 要的是位址
void swap(int &a, int &b);
x=5;
y=7;
printf("Before swap\n");
printf("x=%d\ty=%d\n\n",x,y);
//呼叫 swap 將兩個互相調換
printf("Call swap\n");
swap(x,y);
printf("After swap\n");
printf("x=%d\ty=%d\n",x,y);
system("pause");
return 0;
}
}
//使用swap function 來互相調換
// 使用 &a &b 使用 Call by Reference
void swap(int &a,int &b)
{
int t;
t = a;
a = b;
b = t;
printf("a=%d\tb=%d\n\n",a,b);
}
Lab: Call By Address
// include 引入 .h (標頭檔)
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//進入主程式
int main()
{
int main()
{
int x,y;
//宣告 swap, 因為寫在 main的後面 所以要先宣告
void swap(int *a, int *b);
x=5;
y=7;
printf("Before swap\n");
printf("x=%d\ty=%d\n\n",x,y);
//呼叫 swap 將兩個互相調換
printf("Call swap\n");
//告知swap 使用 Call By Address 的方式來處理
swap(&x,&y);
printf("After swap\n");
printf("x=%d\ty=%d\n",x,y);
system("pause");
return 0;
}
}
//使用swap function 來互相調換
//使用 指標來 接Call by Address
void swap(int *a,int *b)
{
int t;
t = *a;
*a = *b;
*b = t;
//會印出 a 還有b 的位址 所以不會是 5 and 7
printf("a=%x\tb=%x\n\n",a,b);
}
陣列名稱
- 本身就是記憶體的位址
- 第一個陣列的值
Lab:
// include 引入 .h (標頭檔)
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
//宣告 sum 函數
int sum(int *n);
//進入主程式
int main()
{
int main()
{
int n[]={1,2,3,4,5};
//列印出結果
printf("Sum=%d\n",sum(n));
system("pause");
return 0;
}
}
// 利用指標的方式 來承接
int sum(int *n)
{
int s=0;
// 利用 for 迴圈將 n陣列的值加總
for(int i=0;i<5;i++)
{
s+=*n++;
}
return s;
}
可以利用 const 宣告為常數(不能修改)
Lab:轉換英文小寫到大寫
// include 引入 .h (標頭檔)
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
void upper(char s[]);
//進入主程式
int main()
{
int main()
{
char str[100];
printf("Enter String:");
gets(str);
upper(str);
printf("Transfer to Upper Case\n");
printf("%s\n",str);
system("pause");
return 0;
}
}
void upper(char s[])
{
int i=0;
while( s[i] != '\0')
{
//判斷是不是小寫的 a - z
if( s[i] >= 97 && s[i] <= 122)
s[i]-=32;
i++;
}
Lab:轉換英文小寫到大寫 以指標的方式
// include 引入 .h (標頭檔)
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
// header .h 要放在程式的最前面
// 引入 stdio.h 及 stdlib.h
#include "stdio.h"
#include "stdlib.h"
void upper(char *);
//進入主程式
int main()
{
int main()
{
char str[100];
printf("Enter String:");
gets(str);
upper(str);
printf("Transfer to Upper Case\n");
printf("%s\n",str);
system("pause");
return 0;
}
}
void upper(char *s)
{
int i=0;
while( *s != '\0')
{
//判斷是不是小寫的 a - z
if( *s >= 97 && *s <= 122)
*s -= 32;
s++;
}
沒有留言:
張貼留言