1. 程式人生 > >c++中結構體作為函式引數的使用

c++中結構體作為函式引數的使用

結構體雖然和陣列一樣,都可以儲存多個數據項,但是在涉及到函式時,結構變數的行為更接近於一個基本的單值變數,也就是說,與陣列不同,結構將其資料組合成單個實體或資料物件,該實體被視為一個整體。函式中引數為結構時,有三種方法:

1.直接將結構作為引數傳遞,並在需要時作為返回值返回。因此這種方法適用於結構比較小的情況。

例1:

// 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";
}
2.傳遞結構的地址。這種方法適用於結構資料較大時
// 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
  • 由於形參是指標而不是結構,因此應該用 間接成員運算子 (-> ),而不是成員運算子(.)
3.按引用傳遞
參考: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>