c語言結構體的使用 笛風讀書筆記系列

2021-06-21 11:44:07 字數 1837 閱讀 5333

讀書筆記系列之:c語言結構體的使用

笛風

2013.10.11

什麼是結構體? 

簡單的來說,結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別(而結構體是),陣列名稱是常量指標,所以不可以做為左值進行運算,所以陣列之間就不能通過陣列名稱相互複製了,即使資料型別和陣列大小完全相同。 

定義結構體使用struct修飾符,例如:

struct test

;

上面的**就定義了乙個名為test的結構體,它的資料型別就是test,它包含兩個成員a和b,成員a的資料型別為浮點型,成員b的資料型別為整型。 

由於結構體本身就是自定義的資料型別,定義結構體變數的方法和定義普通變數的方法一樣。

test pn1;

這樣就定義了一test結構體資料型別的結構體變數pn1,結構體成員的訪問通過點操作符進行,pn1.a=10 就對結構體變數pn1的成員a進行了賦值操作。 

注意:結構體生命的時候本身不占用任何記憶體空間,只有當你用你定義的結構體型別定義結構體變數的時候計算機才會分配記憶體。 

結構體,同樣是可以定義指標的,那麼結構體指標就叫做結構指標。

結構指標通過->符號來訪問成員,下面我們就以上所說的看乙個完整的例子:

#include

#include

using namespace std;  

struct test//定義乙個名為test的結構體  

;  void main()      

;  void print_score(test pn)//以結構變數進行傳遞  

;  void print_score(test &pn)//以結構變數進行傳遞  

;  void print_score(test &pn)  

void main()  

;  void print_score(test &pn)  

void main()  

呼叫的時候在內部要在棧空間開闢乙個名為pn的結構體變數,程式pn的時候又再次在棧記憶體空間內自動生成了乙個臨時結構體變數temp,在前面的教程中我們已經說過,它是乙個copy,而例程2中的:

void get_score(test &pn) 

卻沒有這一過程,不開闢任何新的記憶體空間,也沒有任何臨時變數的生成。 

第二: 

例程1在mian()中,必須對返回的結構體變數進行一次結構體變數與結構體變數直接的相互賦值操作。

for(int i=0;i函式也是可以返回結構體應用的,例子如下:

#include

#include

using namespace std;  

struct test  

;  test a;  

test &get_score(test &pn)  

void print_score(test &pn)    

{    

cout<pn就是乙個指向指標的引用,它也可以看做是指標別名,總之使用引用要特別注意它的特性,它的操作是和普通指標一樣的,在函式中對全域性指標的引用操作要十分小心,避免破壞全域性指標!

C語言函式指標 笛風讀書筆記系列

讀書筆記系列之 c語言函式指標 笛風 2013.10.8 一 函式指標的定義 顧名思義,函式指標就是函式的指標。它是乙個指標,指向乙個函式。看例子 a char fun1 char p1,char p2 b char fun2 char p1,char p2 c char fun3 char p1,...

linux定時器的使用 笛風讀書筆記系列

讀書筆記系列之 linux定時器的使用 笛風 2013.11.16 首先來看看linux作業系統為每乙個程序提供的3個內部計時器。itimer real 給乙個指定的時間間隔,按照實際的時間來減少這個計數,當時間間隔為0的時候發出sigalrm訊號 itimer virtual 給定乙個時間間隔,當...

C語言讀書筆記

1.c語言中一共有32個關鍵字 分別是 auto int double long char short float unsigned signed sizeof extern static goto if else struct typedef union enum switch case brea...