結構體基礎

2021-10-24 16:54:39 字數 2324 閱讀 5306

結構體:存放不同型別資料的集合。

struct student    //結構體型別為struct student

我們面對的物件有各種各樣資料對應著不同的型別。

結構宣告在函式外時:為全域性結構體,類似全域性變數,在它之後宣告的所有函式都可以使用。

結構宣告在函式內時:為區域性結構體,類似區域性變數,只能放在該函式內使用,如果與全域性結構體同名,則會暫時遮蔽全域性結構體。

定義結構變數的一般形式是:

struct 結構體名 結構體變數名;

struct student    //結構體型別為struct student

struct student s1;

//定義結構體變數

或者可以簡寫為

struct student    //結構體型別為struct student

s1;//定義結構體變數

後續訪問裡面的成員變數就可以使用 s1.name的方式來訪問

接下來結構體中是否可以加入陣列呢?

不止是陣列,結構體也可以加入。

加入其它結構體就和加入其它型別一樣

struct student

s1struct date

這樣就可以實現資訊的分類多元化,有乙個巢狀的效果。

圖為結構體陣列,一般格式為:

struct 結構名 陣列名[陣列長度];

struct studentclass[5] = ,,,

,//注意初始化值的型別和順序要與結構體宣告時成員的型別和順序一致

};

注意結構體陣列要在定義時就直接初始化,如果先定義再賦初值是錯誤的

我們可以直接在結構體中初始化資訊,可以把對成員或者整體初始化。結構體陣列定義最麻煩,其他的方法差不多,不多贅述了。

1.只有結構體變數才分配位址,結構體的定義是不分配空間的。

2.結構體中各成員的定義和之前的變數定義一樣,但在定義時也不分配空間。

3.結構體變數的宣告需要在主函式之上或者主函式中宣告,如果在主函式之下則會報錯

4.c語言中的結構體不能直接進行強制轉換,只有結構體指標才能進行強制轉換

1結構體整體空間是占用空間最大的成員(的型別)所佔位元組數的整數倍。

2.結構體的每個成員相對結構體首位址的偏移量(offset)都是最大基本型別成員位元組大小的整數倍,如果不是編譯器會自動補齊。

ps:偏移量指的是結構體變數中成員的位址和結構體變數首位址的差。即偏移位元組數,結構體大小等於最後乙個成員的偏移量加上他的大小,第乙個成員的偏移量為0。

指標指向的是變數所佔記憶體的首位址,在結構體中,指標指向的是結構體變數的起始位址,也可指向結構體變數的元素。

一共分為三種

1.指向結構體變數的指標

struct student

s1;struct student*p;

p=&s1;

//若為結構體陣列則

struct student class[5]

;struct student*p;

p=s1

2.指向結構體陣列的指標

在我們想要用指標訪問結構體陣列的第n個資料時可以用

struct student class[5]

;struct student*p;

p=class[n];(

++p)

3.結構體成員是指標型別變數

它使用時可以很好地防止記憶體被浪費,但是注意在引用時一定要給指標變數分配位址。

struct student

s1,*s1;

s1.name=

(char*)

malloc

(sizeof

(char))

;//記憶體初始化

且如果我們定義了結構體指標變數,他沒有指向乙個結構體,那麼這個結構體指標也是要分配記憶體初始化的,他所對應的指標型別結構體成員也要相應初始化分配記憶體。

truct student

s1,*s1;

s1=(

struct student*

)malloc

(sizeof

(struct student));

./*結構體指標初始化*/

s1->name =

(char*)

malloc

(sizeof

(char))

;/*結構體指標的成員指標同樣需要初始化*/

結構體基礎

什麼是結構體?簡單的來說,結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而結構...

結構體 基礎

一 結構是什麼?結構體是一種可以儲存多個資料的集合,像陣列一樣,你可以把多個資料儲存到乙個變數裡,但與陣列不同的是,結構體中的成員 和陣列元素一樣,在結構體中我們稱之為成員 可以是不同型別的。結構體和陣列比較 1 陣列中所有元素的型別相同,但結構體允許不同 2 陣列通過 陣列名 下標 或者指標來訪問...

結構體基礎

結構體,結合程式看好多了。程式直接網上ctlr c來的 還有 和 的區別 include include 結構體 int main student struct student pstruct pstruct student 指向student結構體變數 printf the sudent s in...