Pointer : 指標
ª 什麼是指標?
指標(pointer)其實是一種特殊的變數,用來存放變數在記憶體中的位址。
ª 為什麼要使用指標?
1.
2.
3.
4.
ª 指標變數
(一) 宣告
int
*ptr1;
//宣告一個名為ptr1的整數型態之指標變數
char *ptr2; //宣告一個名為ptr2的字元型態之指標變數
(二) 使用
位址運算子 & :用來求取變數的位址。
取值運算子 * : 用來取得指標所指向的記憶體位址的內容。
例如:
int *ptr;
int a=20;
ptr = &a;
printf("ptr所指的位址上的內容為%d",*ptr);
(三)宣告與使用一定要相匹配喔!
指標變數的型態要和所指向的變數型態相同。
ª 【練習一】:
假設 ptr 是指向整數變數 i 的指標,下列何者正確? Ans: ______________
(a) i = *ptr;
(b) ptr = &i;
(c) ptr = *i;
(d) *ptr = i;
ª 指標與函數
在函數中,若是想傳回某個結果給原呼叫函數,可以用return敘述,但是,return敘述只能傳回一個值!!
所以,當程式中需要傳遞兩個以上的值,就無法利用return敘述。
此時,指標就可以解決函數間傳遞多個傳回值的問題。
ª 【練習二】:請寫下執行結果(並說明)
#include <iostream> using namespace std; void swap(int,int); int main(void) { int a=3,b=5;
cout<<"Before swap...\n"; cout<<"a=" <<a <<",b=" <<b <<endl; cout<<"After swap...\n"; swap(a,b); cout<<"a=" <<a <<",b=" <<b <<endl; return 0; } void swap(int x , int y) /* 將兩數互換 */ { int temp=x;
x=y; y=temp; return; } |
#include <iostream> using namespace std; void swap(int *,int *); int main(void) { int a=3,b=5;
cout<<"Before swap...\n"; cout<<"a=" <<a <<",b=" <<b <<endl;; cout<<"After swap...\n"; swap(&a,&b); cout<<"a=" <<a <<",b=" <<b <<endl;; return 0; } void swap(int *x , int *y) /* 將兩數互換 */ { int temp=*x;
*x=*y; *y=temp; return; } |
CALL by VALUE (傳值呼叫) |
Call by address(傳址呼叫) |
執行結果: |
執行結果: |
說明:
|
說明: |
ª 練習三:請Trace 結果:
#include <iostream> using namespace std; void rect(int,int,int *,int *); int main(void) { int a=5,b=8; int area,length;
rect(a,b,&area,&length); /* 計算面積及邊長 */ cout<< "area = " << area << endl; cout<< "total length = "<< length << endl; return 0; } |
void rect(int x , int y, int *ptr1, int *ptr2) { *ptr1=x*y; *ptr2=2*(x+y); return; }
|
請問: area= ____________, length=______________ |