1. 程式人生 > >對C++結構初始化的理解

對C++結構初始化的理解

1.對於儲存的資訊,通常並不是元素的型別都相同,這就導致了結構資料儲存結構,同一個結構可以儲存多種型別的資料,結構是使用者定義的型別,而結構宣告定義了這種型別的資料屬性。首先,定義結構描述,它描述並標記了能夠儲存在結構中的各種資料型別。

//例項1
#include<iostream>
using namespace std;
struct inflatable //structure declaration標記inflatable成為新型別的名稱
{
	char name[20];
	float volume;
	double price;
};
//和陣列一樣使用逗號分開,並將這些值用花括號括起。可以將結構的每個成員都初始化為適當型別的資料。
//name成員是一個字元陣列,因此可以將其初始化為一個字串。
int main()
{
	inflatable guest =
	{
		"Glorious Gloria",
		1.88,
		29.99
	};//guset是一個inflatable 結構型別的結構變數
	inflatable pal =
	{
		"Audacious Arthur",
		3.12,
		32.99
	};//pal 是第二個inflatabe 型別的變數
	//Note:一些實現方法需要使用靜態的inflatable 變數
	cout << "Expand your guest list with " << guest.name;
	cout << " and " << pal.name << "!\n";
//可將每個結構成員看做是相應型別的變數。因此,pal.price是一個double變數,而pal.name是一個數組
//當程式使用cout顯示pal.name時,將把該成員顯示為字串。另外,由於pal.name是一個字元陣列,因此
//可以用下標來訪問其中的各個字元。例如pal.name[0]是字元A。
	cout << "Your can have both for $";
	cout << guest.price + pal.price << "\n";
	return 0;
}

輸出結果如下所示:

結構宣告的位置很重要,通常有兩種選擇,可以將宣告放在main()函式中,緊跟開始括號的後面。另一種選擇將宣告放到main()的前面,對於上述例項,兩種選擇之間沒有實際區別。但是對於那些包含兩個或更多函式的程式來說,差別很大。外部宣告可以被其後面的任何函式使用而內部宣告只能被該宣告所屬的函式使用。變數也可以在函式內部和外部定義,外部變數由所有的函式共享。

2成員間的賦值,可以使用賦值運算子(=)將結構賦給另一個同類型的結構,這樣結構中每個成員都將被設定為另一個結構中相應成員的值,即使成員是陣列,這種賦值被稱為成員賦值

//例項2
#include<iostream>
using namespace std;
struct inflatable
{
    char name[20];
    float volume;
    double price;
};
int main()
{
    inflatable bouquet =
    {
        "sunflowers",
        0.20,
        12.49
    };
    cout<<"bouquet:"<<bouquet.name<<" for $";
    cout<<bouquet.price<<endl;
    inflatable choice = bouquet;
    cout<<"choice:"<<choice.name<<"for $";
    cout<<choice.price<<endl;
    return 0;
}

輸出結果如下所示:

3.結構陣列

陣列可以建立元素為結構的陣列,方法和建立基本型別陣列完全相同.guests本身是一個數組,而不是結構,因此像guests.price

是無效的,要初始化陣列,可以結合使用初始化陣列的規則(用逗號分隔每個元素的值,並將這些值用花括號括起)。由於陣列中每個元素都是結構,因此可以使用結構初始化的方式提供它的值。

inflatable guests[2]=
{
    {"Katy", 0.5, 21.99},
    {"City", 0.6, 32.02}
}