(一)基本概念
結構體是乙個或是多個變數的集合,這些變數可能為不同的型別,為了處理的方便而將這些變數組合在乙個名字之下。我們將關鍵字struct引入了結構宣告中。結構宣告包含在花括號內的一系列宣告組成。例如:
// 以下是乙個巨普通的結構體,表示座標。
// point 為結構標記;x, y為成員。
struct point
;
// 以下是跟變數表的情形
struct point
px, py, pz;(二)使用方法
1. 初始化方法
(1) 結構體變數的初始化方式分別給結構體的成員變數以初始值.
具體的形式如下:
struct 結構體識別符號
;
第一種初始化:
struct 結構體識別符號 變數名 = ;
struct point impl = ;
第二種初始化:
struct 結構體識別符號 變數名;
變數名.成員 = 值;
struct point impl;
impl.x = 100;
impl.y = 200;
第三種初始化方法:
struct 結構體識別符號
變數名 = ;
struct point
impl = ;對於結構體內還有結構體的形式,可以用以下的方式來解決:
struct rect
;
第一種初始化方法:
struct rect rect_impl;
rect_impl.pt1.x = 100;
第二種初始化方法:
struct rect
rect_impl = ,
};2. 結構體與指標
結構與指標其實密不可分,在函式的返回和呼叫中,我們不能用複製整個結構體的方式,因為這樣的效率實在是太低了。誰都不希望將乙個大象抗在身上,然後到處跑!
這個時候,指標出現了。就像救世主出現在人間,趕走了大象,留下了羽毛。
以下是實現形式:
struct point *ppt, origin;
origin.x = 100;
origin.y = 200;
ppt = &origin; // 將origin的位址傳給ppt
// 以下是結構體指標的兩種呼叫形式
std::cout << (*ppt).x << std::endl; // 100
std::cout << ppt->x << std::endl; // 100
// 對於函式的呼叫
struct point *func(struct point *, int x){}3. 結構體與陣列,鍊錶
如果說當個結構體個體只是一塊板磚的話,那麼與陣列結合,就是一堆板磚啊!
以下是陣列
// 結構體與陣列
// 第一種實現形式:
struct point
pta = ;
// 第二種實現形式:
struct point
;
struct point pta[10]; // 定義了10個point
pta[1].x = 100;以下是鍊錶
// 二叉樹的鏈式結構
typedef struct tnode
*bitree;
// 構造二叉樹的方法
// 構造一棵空的二叉樹
void initbitree(bitree &bit)
bit->lchild = null; // 左子樹為空
bit->rchild = null; // 右子樹為空
}4. 結構體與typedef
typedef用來建立新的資料型別名。以下用**來解釋:
// 二叉樹的鏈式結構
typedef struct tnode
*bitree;
// 也可用下面的方式
struct tnode
;
typedef struct tnode *bitree;
// 以上兩種效果都一樣其實,typedef沒有建立新的型別。只是增加了乙個新的名詞而已。這樣做的好處有倆
參考文獻
1.《c++ primer》和《c語言程式設計》
2. 參閱了網上許多小道的內容,這個記不得了。。抱歉抱歉!!
struct 結構體解析(原)
一 基本概念 結構體是乙個或是多個變數的集合,這些變數可能為不同的型別,為了處理的方便而將這些變數組合在乙個名字之下。我們將關鍵字struct引入了結構宣告中。結構宣告包含在花括號內的一系列宣告組成。例如 point 為結構標記 x,y為成員。struct point 以下是跟變數表的情形 stru...
什麼結構體 struct
簡單的來說,結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而結構體是 陣列名稱...
定義結構體 struct
於 鏈結,struct student struct student stu struct student stuarray 10 struct student pstru 結構體型別是struct student,因此,struct和student都不能省略。但實際上,我用codeblocks執行...