為結構編寫函式比為陣列編寫函式更簡單,雖然,結構變數和陣列一樣,都可以儲存多個資料項,但在涉及到函式時,結構變數的行為更接近普通基本變數,也就是說,與陣列不同,結構將其資料組合成單個實體或資料物件,該實體被視為乙個整體,可以將結構賦給另乙個結構,也可以按值傳遞結構,就像普通變數一樣。在這種情況下,結構使用的是原始資料的副本。另外,函式也可以返回結構,與陣列不同,陣列名表示為陣列第乙個元素的位址,而結構名就是乙個名稱,要獲得結構位址,需要使用位址運算子&。
下面介紹兩種,結構在函式中的傳遞方式
當結構比較小時,按值傳遞結構最合理。下面來看技術示例,假設要描述螢幕上某點的位置,或地圖上相對於原點的位置,則一種方法是指出該點相對於原點的水平位移量和垂直位移量即直角座標系中的x,y座標值。可以用結構來表示,
struct rect
另一種描述點的位置的方法是,指出它偏離原點的距離和方向(例如,東北方向40度)。距離和角度構成了傳統意義上的極座標系。
struct polar
此例中,我們構建乙個轉換函式,將直角座標轉換成極座標,並返回此極座標,再建立乙個顯示函式,顯示此極座標。
轉換函式:
polar rec_to_polar(rect xypos)
此處,atan2()函式可以根據x和y的值計算角度,此角度是與x軸的夾角,返回值的單位為弧度,取值範圍為[-π,π]。引用標頭檔案為cmath。
顯示函式:這裡為了便於檢視,需要把弧度值轉換為角度值,意味著將弧度值乘以180/π,即57.29577951
void show_polar(polar dapos)
全部程式**;
#include
#include
struct rect
;struct polar
;polar rec_to_polar(rect xypos);
void show_polar(polar dapos);
int main()
cout
<
return0;}
//轉換函式
polar rec_to_polar(rect xypos)
//顯示函式
void show_polar(polar dapos)
輸出結果:
//轉換函式
polar* rec_to_polar(const rect* xypos)
//顯示函式
void show_polar( const polar* dapos)
輸出結果:
程式需要注意的問題是:
當函式返回乙個指標,該指標指向new分配的記憶體,切記,切記,切記,使用delete釋放掉它們。
結構體和函式
main.c c語言學習 include void change int value 定義乙個結構體型別 struct person void change2 struct person value void change3 struct person p int main int argc,con...
signal函式和sigaction結構體理解
signal函式和sigaction結構體理解 一,signal函式 詳細介紹 include include include sig ign忽略 sig dfl預設,這倆巨集也可以作為訊號處理函式。同時sigstop sigkill這倆訊號無法捕獲和忽略。注意,經過實驗發現,signal函式也會堵...
C 結構函式和析構函式
結構函式和析構函式就是分別用於物件的初始化和清理,在我們不提供結構函式和析構函式時,編譯器會提供結構函式和析構函式,但是是空實現。主要用於在建立物件時,為物件的成員屬性賦值,結構函式由編譯器自動呼叫,無需手動呼叫 結構函式又分為 無參結構函式 有參結構函式和拷貝結構函式 無參結構函式 即結構函式無引...