1. 程式人生 > >C++ 結構體巢狀

C++ 結構體巢狀

該部落格主要是示例如何使用結構體巢狀進行函式變數的封裝傳遞。

主要任務是使用一個結構體包含一些目標的名稱、距離、角度資訊。不同場景下的目標數量是不一樣的,所以不能使用固定的陣列來進行儲存,使用陣列太大時浪費空間,太小是又擔心不能正確儲存資訊。所以建議使用結構體巢狀的方法來進行定義,這樣方便進行有效儲存與傳遞。

巢狀結構體的定義

struct TargetInfo
{
    string TargeName;
    float angle;
    float distance;
};


struct TargetsInfos
{
    int num;
    struct TargetInfo *
info; };

在上邊的程式中,我們建立了兩個結構體第一個是結構體TargetInfo,該結構體中是用來儲存目標的資訊,其中包含字元型目標名稱、float型的目標角度和距離資訊。建立的第二個結構體是這批目標資訊,包含的是這批目標的數量和每一個目標具體TargetInfo``結構體的資訊。這裡使用指標的方式進行引入。

巢狀結構體的使用

GetStruct(float num)
{
    TargetInfo Info;
    Info.angle = num;
    Info.distance = num;
    Info.TargeName = num;
    return Info;
} TargetsInfos infos; infos.size = 5; infos.info = new TargetInfo[infos.size]; for(float i = 0;i < infos.size;i ++) { infos.info[(int)i] = GetStruct(i); }

這裡我們藉助一個GetStruct()函式進行簡單地結構體賦值。需要注意的是:

infos.info = new TargetInfo[infos.size];這裡使用的是new建立新的陣列來儲存目標資訊,所開闢空間的大小正好可以使用目標的數量來作為判斷標準進行賦值。

infos.info[(int)i] = GetStruct(i);這個是藉助韓式進行賦值,也可以單個變數進行賦值,例如infos.info[1].angle = 5;