C 中的結構體(C 入門)

2021-08-27 07:10:36 字數 1930 閱讀 1718

什麼是結構體?

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

定義結構體使用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而例程2中由於是通過記憶體位址直接操作,所以完全沒有這一過程,提高了效率。 

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《呼叫get_score(a);結束並返回的時候,函式內部沒有臨時變數的產生,返回直接吧全域性結構變數a的記憶體位址賦予結構引用sp

最後提一下指標的引用

定義指標的引用方法如下:

void main()

{ int a=0;

int b=10;

int *p1=&a;

int *p2=&b;

int *&pn=p1;

cout

C 中的結構(結構體)

結構是可以包含資料成員和函式成員的資料結構,這一點和類一樣 下面我們講一下結構與類不同的地方 1.結構體是值型別,無需進行堆分配,類是引用型別 2.結構型別的變數直接儲存資料結構,而類型別的變數儲存對動態分配的物件的引用 3.類支援繼承,結構體不支援繼承 4.關鍵字簡單說下,類是class,結構體是...

C 中的結構體

c 中的結構體關鍵字typedef可以直接省略,甚至不省略的話,還會提示你省略 原因 c語言的 struct 定義了一組變數的集合,c編譯器並不認為這是一種新的型別 c 中的struct是乙個新型別的定義宣告,所以可以省略typedef,定義變數的時候也可以省略struct,而不用像c語言那樣沒使用...

C和C 中的結構體

c c 結構體的區別 c中的結構體和c 中結構體的不同之處 在c中的結構體只能自定義資料型別,結構體中不允許有函式,而c 中的結構體可以加入成員函式。c 中的結構體和類的異同 一 相同之處 結構體中可以包含函式 也可以定義public private protected資料成員 定義了結構體之後,可...