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=______________