一. 結構體:
程式設計客棧1. 定義結構體型別:
struct 結構體
;注意:這不是定義變數,而是自定義一種型別而已。
如struct student
;//此處分號不能少。
2. 定義結構體變數。
型別定義好以後,則可以定義該型別的變數。
定義結構體變數:
struct student a,b;// struct可以省略。
可以在定義結構體變數的時候賦值。
如student a={」liudehua」,172,1},b=;
也可以在定義結構體變數以後賦值,但注意不能再用{}。
如:student a,b;
a={」liudehua」,172,1},b=;//這是錯誤的。
而應該是:
strcpy(a.name,」liudehua」);
a.height=172;
a.***=1;
3.可以在定義結構體型別的時候同時定義結構體變數並賦值。
struct student
a={」liudehua」,172,1},b=;
4.訪問結構體:
訪問結構體成員要用直接成員運算子「.」或間接成員運算子「->」。
student a={」liudehua」,172,1};
cout<
student *p=&a;
cout對於結構體變數,訪問其中的成員採取「結構體變數.成員」的形式;而對於結構體指標,訪問它所指向的結構體變數中的成員,則採取「結構體指標->成員」形式。
二.聯合體
聯合體也是一種自定義的復合型別,它可以包含多個不同型別的變數。這些變數在記憶體當中共用一段空間。這段空間的size就是各變數中size最大的那個變數。
1定義聯合體型別:
union myunion
{int num1;
double num2;
float num3;
};www.cppcns.com定義了乙個聯合體型別myunion。
myunion a,b;//定義了兩個myunion型變數。
也可以在定義聯合體型別的時候定義聯合體變數。
如:union myunion
{int num1;
double num2;
float num3;
}a,b;
a占用的空間有多大呢?
sizeof(a)結果即為8,即myunion占用8個位元組,和double型變數相同。
注意:任一時刻,只能訪問結構體裡面的乙個變數。
a.num1=2;
a.num2=3.154;
myunion *p;
p=&a;
p->num3=5.6;
三.列舉型別
1.列舉型別的定義:
列舉型別也是一種自定義的復合型別。不過,列舉型別中的成員都是常量。
如enum color
{ red,
green,
blue,
white,
black
};列舉型別中的成員預設值為從0開始,依次序遞增。此時red==1,green為2,blue為3,white為4,black為5.
也可以改變起預設值。
如enum color
{ red=1,
green=3,
blue=5,
white,
black
};沒有初始化的列舉型別成員的值將在它前面的成員基礎上遞增。
所以,white的值為6,而black的值為7.
2.定義列舉變數:
color a1,a2;
3.給列舉變數賦值:
&nbs程式設計客棧p; a1=red;
a2=blue;
cout<
雖然列舉常量的值整數,但是不能直接將整數值賦給列舉變數。
如a1=1;//這是不對的。因為型別不匹配。乙個是整型,乙個是列舉型別。
a1=(color)1;//正確
列舉變數的size是乙個整數的大小。
本文標題: 全面了解結構體、聯合體和列舉型別
本文位址: /ruanjian/c/156200.html
結構體,聯合體和列舉型別
一.結構體 結構體資料的存放 位段的缺點 不具有跨平台性 二.聯合體 三.列舉型別 若沒有位段 先找預設對齊數和每個數的較小值,再在這些較小值中找出最大的,即為最大對齊數.若上個對齊數開闢的空間還有冗餘可以放下下個數,就把下個數也放在這個空間內,如果不夠放下下個數,就把下個數放到下個空間內.當結構體...
結構體 聯合體 列舉
1 結構體struct 結構體的作用 在網路協議 通訊控制 嵌入式系統的c c 程式設計中,我們要傳送的不是簡單的位元組流 char型陣列 二是多種資料組合起來的乙個整體,其表現形式是乙個結構體。使用struct的注意事項 1 下面看乙個題目 結果 6 12 這裡涉及到結構體的記憶體對齊方式。1 關...
結構體 聯合體 列舉
結構體 1.宣告乙個結構體型別的一般形式為 struct 結構體名 成員表列 如 struct student 表示可選項 注 宣告不是定義,故不可對成員列表中的成員進行初始化。定義別名 方法一 如 struct 結構體名 typedef struct 結構體名 別名 方法二 如 typedef s...