C語言- 第三十二章| struct - 結構與指標

文章推薦指數: 80 %
投票人數:10人

C語言教學,struct - 結構與指標,示範了如何宣告struct指標,以及如何使用&對struct實例取位址值,如果使用struct的指標來存取其成員,則必須使用-> ... Thiswebsite Archives Categories Tags About Donate RSS 歡迎!您似乎正在使用廣告攔截器。

請考慮通過禁用您的廣告攔截器來支持我。

J.J.Huang   2019-11-27   C   瀏覽次數:次 {{moment(1574816400000).fromNow()}} C語言-第三十二章|struct-結構與指標 結構與指標示範了如何宣告struct指標,以及如何使用&對struct實例取位址值,如果使用struct的指標來存取其成員,則必須使用->運算子。

1234567891011121314151617#includestructBall{charcolor[10];doubleradius;};intmain(){structBallball={"red",4.0};structBall*ptr;ptr=&ball;printf("ball:%s\t%.2f\n",ptr->color,ptr->radius);return0;} 12//執行結果ball:red4.00 在C語言-第三十一章|struct-struct簡介說過,如果要將struct實例作為引數傳遞,則會直接進行成員值的複製,如果並不想要複製實例,可以直接傳遞struct實例的位址值。

123456789101112131415161718192021#includestructBall{charcolor[10];doubleradius;};voidshow(structBall*ball);intmain(){structBallball={"red",4.0};show(&ball);return0;}voidshow(structBall*ball){printf("ball:%s\t%.2f\n",ball->color,ball->radius);} 12//執行結果ball:red4.00 想要傳遞struct實例的位址值,一是情況是函式想改變的是被傳遞的struct實例本身,而不是實例的複本,另一個情況效率考量,如果struct實例本身很龐大,若不想有複製整個struct實例負擔時,也可採用傳遞struct實例位址值的方式。

注意到,以下的語法取得的是struct實例的成員位址值,而不是struct實例的位址值。

12structBallball={"red",4.0};printf("%p\n",&ball.color); 為了避免誤會,建議加上括號比較清楚。

12structBallball={"red",4.0};printf("%p\n",&(ball.color)); 類似的,如果ptr是struct的指標,並儲存某個實例的位址值,那麼以下取得的是實例的成員位址值,而不是實例的位址值,建議還是如第二行的,加上括號比較清楚。

12printf("%p\n",&ptr->color);printf("%p\n",&(ptr->color)); 下面這個例子是個比較進階的例子,程式中使用函式指標,讓struct實例擁有可操作的函式,而在操作struct實例擁有的函式時,傳入實例的位址值,如此該函式可以取得實例成員值並進行運算,這是在模擬物件導向中,物件實例擁有屬性及方法(method)的特性。

1234567891011121314151617181920212223242526272829#include#includetypedefstructBall{char*color;doubleradius;double(*volumn)(structBall*);//函式指標}Ball;//計算實例體積doublevolumn(Ball*this){doubler=this->radius;//模擬this指標的行為returnr*r*3.14;}Ball*new_ball(char*color,doubleradius){Ball*ball=(Ball*)malloc(sizeof(Ball));ball->volumn=volumn;//連結函式ball->color=color;ball->radius=radius;returnball;}intmain(){Ball*ball=new_ball("red",5.0);printf("ball實例的體積:%.2f\n",ball->volumn(ball));return0;} 12//執行結果ball實例的體積:78.50 struct指標的應用之一,可以參考堆疊-使用鏈結實作(C語言動態記憶體宣告)與佇列-使用鏈結實作(C語言動態記憶體宣告),當中的鏈結資料結構,就使用struct指標來連結下一個節點實例。

註:以上參考了結構與指標佇列-使用鏈結實作(C語言動態記憶體宣告)堆疊-使用鏈結實作(C語言動態記憶體宣告) C語言-第三十一章|struct-struct簡介 C語言-第三十三章|struct-位元欄位



請為這篇文章評分?