c++中結構體作為函式引數的使用
結構體雖然和陣列一樣,都可以儲存多個數據項,但是在涉及到函式時,結構變數的行為更接近於一個基本的單值變數,也就是說,與陣列不同,結構將其資料組合成單個實體或資料物件,該實體被視為一個整體。函式中引數為結構時,有三種方法:
1.直接將結構作為引數傳遞,並在需要時作為返回值返回。因此這種方法適用於結構比較小的情況。
例1:
2.傳遞結構的地址。這種方法適用於結構資料較大時// travel.cpp -- using structures with functions #include <iostream> struct travel_time { int hours; int mins; }; const int Mins_per_hr = 60; travel_time sum(travel_time t1, travel_time t2); void show_time(travel_time t); int main() { using namespace std; travel_time day1 = {5, 45}; // 5 hrs, 45 min travel_time day2 = {4, 55}; // 4 hrs, 55 min travel_time trip = sum(day1, day2); cout << "Two-day total: "; show_time(trip); travel_time day3= {4, 32}; cout << "Three-day total: "; show_time(sum(trip, day3)); // cin.get(); return 0; } travel_time sum(travel_time t1, travel_time t2) //結構作為函式引數直接傳入 { travel_time total; total.mins = (t1.mins + t2.mins) % Mins_per_hr; total.hours = t1.hours + t2.hours + (t1.mins + t2.mins) / Mins_per_hr; return total;//結構作為函式結果直接傳出 } void show_time(travel_time t) { using namespace std; cout << t.hours << " hours, " << t.mins << " minutes\n"; }
// strctptr.cpp -- functions with pointer to structure arguments #include <iostream> #include <cmath> // structure templates struct polar { double distance; // distance from origin double angle; // direction from origin }; struct rect { double x; // horizontal distance from origin double y; // vertical distance from origin }; // prototypes void rect_to_polar(const rect * pxy, polar * pda); void show_polar (const polar * pda); int main() { using namespace std; rect rplace; polar pplace; cout << "Enter the x and y values: "; while (cin >> rplace.x >> rplace.y) { rect_to_polar(&rplace, &pplace); // pass addresses show_polar(&pplace); // pass address cout << "Next two numbers (q to quit): "; } cout << "Done.\n"; return 0; } // show polar coordinates, converting angle to degrees void show_polar (const polar * pda) { using namespace std; const double Rad_to_deg = 57.29577951; cout << "distance = " << pda->distance; cout << ", angle = " << pda->angle * Rad_to_deg; cout << " degrees\n"; } // convert rectangular to polar coordinates void rect_to_polar(const rect * pxy, polar * pda)//結構通過指標傳入函式 { using namespace std; pda->distance = sqrt(pxy->x * pxy->x + pxy->y * pxy->y); pda->angle = atan2(pxy->y, pxy->x); //通過在函式中修改結構的成員 }
- 呼叫函式時,將結構的地址(&)而不是結構本身傳遞給它
- 將形參宣告為指向poor的指標,由於函式不應該修改結構,因此使用了const
- 由於形參是指標而不是結構,因此應該用 間接成員運算子 (-> ),而不是成員運算子(.)
參考:c++中引用變數的使用
相關推薦
c++中結構體作為函式引數的使用
結構體雖然和陣列一樣,都可以儲存多個數據項,但是在涉及到函式時,結構變數的行為更接近於一個基本的單值變數,也就是說,與陣列不同,結構將其資料組合成單個實體或資料物件,該實體被視為一個整體。函式中引數為
C++ 字串 14-- 18.40.結構體與函式 結構體作為函式引數、結構體指標作為函式返回值
#include <iostream> #include <string> using namespace std; /*--------------------------------- 18.40.結構體與函式 結構體作為函式引數、結構體指標作為
結構體作為函式引數(值傳遞,引用傳遞,指標傳遞)
一、值傳遞 #include <iostream> #include <string> using namespace std; struct Student { int id; string name; float sco
C++中結構體中的解構函式和建構函式
在C++中除了類中可以有建構函式和解構函式外,結構體中也可以包含建構函式和解構函式,這是因為結構體和類基 本雷同,唯一區別是,類中成員變數預設為私有,而結構體中則為公有。注意,C++中的結構體是可以有解構函式和構造 函數,而C則不允許。至於聯合體,它是不可能有解構函式和建構
C語言中指標變數作為函式引數和一般變數作為函式引數的區別
函式的引數不僅可以是整型、浮點型、字元型等資料,還可以是指標型別。它的作用是將一個變數的地址傳送到另一個函式中。 指標變數作為函式引數和一般變數作為函式引數是有區別的,對於這種區別初學者一般都很迷惑。下面我將就一個簡單的例子來說明一下它們的區別。看透以後也許也就不那麼疑惑了。
淺談c++中結構體和共用體的區別
ont 基本類型 erl list 變量名 ext 使用結構體 oot 數據格式 在c++中,結構體(struct)和共用體(union)是兩種很相似的復合數據類型,都可以用來存儲多種數據類型,但是兩者還有很大的區別。 結構體(struct) 結構是用戶自定
c++中結構體sort()排序
double struct def str tro c++ style average span //添加函數頭 #include <algorithm> //定義結構體Yoy typedef struct { double totalprice; double
C#中結構體定義並轉換位元組陣列 C#中結構體定義並轉換位元組陣列
ref: https://www.cnblogs.com/dafanjoy/p/7818126.html C#中結構體定義並轉換位元組陣列 最近的專案在做socket通訊報文解析的時候,用到了結構體與位元組陣列的轉換
C#中結構體與位元組流互相轉換
C++的訊息結構體如下 struct cs_message{ u32_t cmd_type; char username[16]; u32_t dstID; u32_t
C++中結構體的對齊方式
在面試中,常會考到結構體的對齊方式,因此對其進行總結。 1、在沒有#pragma pack巨集的情況下 struct sA{ double d1; int i1; double d2; char c1;
C++ 之std::function() 作為函式引數入口 詳解
1. 關於std::function() 在C語言的時代,我們可以使用函式指標來吧一個函式作為引數傳遞,這樣我們就可以實現回撥函式的機制。到了C++11以後在標準庫裡引入了std::function模板類,這個模板概括了函式指標的概念 函式指標只能指向一個函式,而std::function物件可
C++中結構體與類的區別(struct與class的區別)
C++中的struct對C中的struct進行了擴充,它已經不再只是一個包含不同資料型別的資料結構了,它已經獲取了太多的功能。struct能包含成員函式嗎? 能! struct能繼承嗎? 能!! struct能實現多型嗎? 能!!! 既然這些它都能實現,那它和clas
C#中結構體和類區別和聯絡
結構體 結構體定義 結構體是一種值型別,通常用來封裝小型相關變數組。例如座標或者商品的特徵。 結構體是一種自定義的資料型別,相當於一個複合容器,可以儲存多種型別。 結構體由結構體成員構成,結構體成員包含欄位,屬性與方法 結構體建
C#中結構體與類的區分
在類的使用過程中,既不需要很多方法,也不需要從類中繼承,為了提升效能,可以使用結構體來替代類。 與類不同的是,結構體用struct 修飾;結構體中的例項欄位不能自定義預設值,而類可以,編譯器會隱式的給出結構體和類的預設建構函式,但是結構體的預設構造不能顯示給出,不然編譯器會
C#中結構體和類的區別
結構體和類同樣能夠定義欄位,方法和建構函式,都能例項化物件,這樣看來結構體和類的功能好像是一樣的了,但是他們在資料的儲存上是不一樣的C#結構體和類的區別問題:這兩種資料型別的本質區別主要是各自指向的記憶體位置不同。傳遞類的時候,主要表現為是否同時改變了源物件。1.結構體是值型
C++中結構體與類的區別
學習了C++的面向物件,最常見的和寫的就是類結構體,下面主要介紹一下結構體和類的區別。 首先類是C++中面向物件獨有的,但是C和C++中都有結構體,下面我們來看一下C和C++中結構體的區別。這裡主要從封裝、多型、繼承、封裝和訪問許可權幾個方面來說。1、C和C++中結構體的區
【知識積累】C#中結構體和類的區別
【類】 類是對現實生活中一類具有共同特徵的事物的抽象。類的實質是一種資料型別,類似於int、char等基本型別,不同的是它是一種複雜的資料型別。因為它的本質是型別,而不是資料,所以不存
C/C++中結構體(struct)
c++ 裡面struct可以new,另外:C++中,struct關鍵字與Class關鍵字基本是一樣的,但是,有兩點不同 1 struct定義的資料型別裡面所有成員預設級別都是共有的,而class裡面所有成員預設級別都是私有的 2 在模板定義中,只能用class 或者
C中結構體的儲存分配
對於C語言中結構體所佔的儲存空間的大小,也一直是筆試面試的常客,今天好好看了一下這方面,以前一直以為很清楚了,今天通過各種實際測試舉例,發現原來還是沒有搞透徹,好在現在是徹底懂了,所以和大家分享,希望能有所幫助。提到結構體,相信大家都知道元素儲存要對齊,話是沒有錯,只是這個“對齊”裡面包含了很多微妙的東西。
C語言結構體定義函式指標的簡單高效的使用例子
對於大型專案來說,struct的使用會使整個程式碼更加簡約,閱讀起來和寫起來都更加簡便,以後就要多嘗試這種用法了。下面是一個簡單例子,可以參考一下。 #include <stdio.h>