C語言入門第十七篇,結構體

結構體是C語言很重要的概念,他是數據結構的關鍵。
基本性質
個人理解結構體是一種變量的集合體,他把變量放入了一個結構裏面,形成了一個結構體。我們先看看他的基本語法。
struct 結構體名
{
結構體
}
我們看上面的基本語法可以看出,我們需要給出結構體名和內部的結構體就能聲明一個結構體變量。上面的語法還不能表現真正結構體的屬性,我們來看看一個例子,我們需要定義一個學生的結構體,裏面存放學號,姓名,性別。

struct student{
    int num;
    char name[20];
    char sex[10];
}

這只是一個結構體的定義,我們需要使用這個結構體還需要聲明一個變量,方法如下:

struct student students;

students就是一個結構體變量。那麼怎麼使用這個變量呢?如下:

scanf("%d",&students.num);
scanf("%s",students.name);
scanf("%s",students.sex);

上面的代碼是我們對學號,姓名,性別進行輸入。可以看到我們在結構體中用點(.)來訪問結構體中的變量。可是我這樣只能輸入一個結構體,我有50個學生怎麼辦?
結構體數組
結構體是一個變量類型,如同整型,浮點型一樣,結構體同樣也有數組。怎樣聲明呢?

struct student students[50];

有了結構體數組我們就可以輸入50個學生了。這個數組可以像我們之前利用循環進行輸入,具體的例子如下:

int i;
for(i=0;i<50;i++){
    scanf("%d",&students[i].num);
    scanf("%s",students[i].name);
    scanf("%s",students[i].sex);
    }

這裏深入的講一下,結構體數組其實是數據結構中的順序鏈表,前面就講過數組是連續的一片內存地址,所以結構體數組在作爲鏈表的時候是連續的一片內存。與之對應的當然是隨機的內存地址實現的鏈表,而這樣的鏈表是利用指針實現的。這些知識如果是小白的話,瞭解一下就好了,我們後面會仔細的講他的原理和實現的方法,當然這些本來是數據結構的東西,所以強烈建議大家在看了這個入門後(雖然我不知道什麼時候能寫完哈哈哈,但是儘量能在這幾個月完成這個),去學習數據結構。
結構體指針
剛剛說到鏈表的另一種實現方法就是結構體指針。這一塊就比較複雜了,但是我在前面有足夠的鋪墊。希望大家這裏能夠明白,我暫時不講怎麼樣實現50個學生的鏈表,只是介紹一下結構體指針。
結構體指針比結構體數組要複雜一些,因爲如果我們聲明一個結構體指針的話,他是沒有足夠大的內存空間的,所以我們需要申請內存(我們在前一章講過數組申請內存)。我們來看看例子:

//#include<stdlib.h> 上一章忘了說了,申請內存需要stdlib.h這個頭文件
struct student *students;
students=(struct student *)malloc(sizeof(struct student));//申請內存
scanf("%d",students->num);
scanf("%s",students->name);
scanf("%s",students->sex);

這裏就是結構體指針的使用方法,申請內存的方法其實很簡單,前面的(struct student *)是後面申請的內存的類型強制轉換成結構體的類型,sizeof()函數就是計算student這個結構體需要多大的內存,最後賦值給students。結構體指針調用自己內部的元素時也不再用.(點)而是->這個符號。
總結
本篇介紹了結構體這種變量的內容,他只是一個變量的類型,我們需要掌握他的聲明和調用方式。還要熟悉結構體數組和結構體指針這兩個結構體以後會常常用到的東西。
練習
1.能否將我這篇所說的利用結構體數組和我給的零星的代碼,寫出輸入10個學生基本信息(學號,姓名,性別),並輸出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章