2010年5月16日 星期日

指標與副程式

這是一個我以前不會的用法


如果副程式寫成


int (*ptr)(int a,int b); //ptr是一個函數


int add(int a,int b){
 return a+b;
}


int main(void){


int k1;


ptr=add;
k1=(*ptr)(2,2);
 
 }


這是副程式傳址的方式


int k1;
int *k2;
char test ;
char *test2;



int* add(int a, int b){
 k1=a+b;
 return &k1;
}


char* add2(char a, char b){
 k1=a+b;
 return (char*)&k1;
}


int main(void){


 k2=add(2,2);
 
 test2=add2(2,2);


}


 


其中


return (char*)&k1;  


我一開始的時候,我還搞不懂,這到底是什麼


&k1 是取址,而前面加了個(char *) 又是什麼


後來才知道


原來


(char*) 有點像是強制轉變數的感覺,只是轉的指標,但有趣的是,傳位置的時候,大小是不會變的


會變的是*ptr 的內容。


 


給大家做參考。


PS:書本寫的比較清楚,可以參考:蔡明志,指標的藝術,碁峰(這個字我打不出來,「山」字邊在上頭才對)。



 


1 則留言:

  1. 這是function pointers的用法
    我在callback function還蠻常用到的

    回覆刪除