2008年6月3日

c語言-pointer(2)-指標與函數

在函數的return只能回傳一個值。當需要回傳二個值以上的時候,就需要利用到指標了。
(1)宣告一個將指標當成引數傳入函數的函數產原型之宣告。格式如下:
剛開始:fucn(int*,char*);

函數部份(副程式):
int func(int *ptr1,char *ptr2)
舉一個例子:
/*傳回多個數值的函數*/
#include
#include
void rect(int,int,int*,int*);
int main(void)
{
int a=5,b=8;
int area,length;

rect(a,b,&area,&length);
printf("area=%d,total length=%d\n",area,length);
system("pause");
return 0;
}

void rect(int x,int y,int *ptr1,int *ptr2)
{
*ptr1=x*y;
*ptr2=2*(x+y);
return;
}
____________________________________________________
結果:
area=40,total length=26
____________________________________________________
這一個程式可以更改成

/*傳回多個數值的函數*/
#include
#include
void rect(int,int,int*,int*);
int main(void)
{
int a=5,b=8;
int *area,*length;
area=&a;
length=&b;
rect(a,b,area,length);
printf("area=%d,total length=%d\n",*area,*length);
system("pause");
return 0;
}

void rect(int x,int y,int *ptr1,int *ptr2)
{
*ptr1=x*y;
*ptr2=2*(x+y);
return;
}
_____________________________________________________________
結果:
area=40,total length=26
____________________________________________________________
有注意兩者的差別嗎?
指標的秘密在於位址。了解就都懂了。第一個程式是儲在自己的指標的位址。
而第二個程式則是借用a、b的位址,頓時,a,b的值也改變成a=40,b=26。
____________________________________________________________
介紹一下函數的傳回指標型態的變數值,只要在宣告函數原型及定義函數時,在函數名稱前面加上指標符號*,即可傳回指標了。
剛開始
int *maximum(int *);
.
.
.
ptr=maximum(a); /* 不需要有* */


函數部份(副程式)
int *maximun(int *m)
.
.
.
return max;

沒有留言: