c語言允許使用者根據具體問題利用已有的基本資料型別來構造自己所需的資料型別
陣列是由相同型別的資料構成的一種資料型別,適用於對具有相同屬性的資料進行批量處理
結構體是將不同的資料成員組織到統一的名字之下,適用於對關係緊密、邏輯相關、具有相同或者不同屬性的資料進行處理
結構體變數的定義
1.定義結構體的第一步是宣告乙個結構體模板,其標準格式如下
struct 結構體名
;宣告結構體模板的主要目的是利用已有的資料型別定義乙個新的資料型別
例如,宣告乙個名為struct student的結構體型別:
struct student ;
結構體模板只是宣告了一種資料型別
,定義了資料的組織形式,並未宣告結構體型別的變數,因此編譯器不為其分配記憶體,正如編譯器不為int型分配記憶體一樣
2.定義結構體的第二步是利用已經定義好的結構體資料型別來定義結構體變數
1)先宣告結構體模板,再定義結構體變數
例如,利用前面已經宣告的結構體型別,定義乙個具有該型別的結構體變數stu1:
struct student stu1
2)在宣告結構體變數的同時定義結構體變數
struct student
stu1;
3.用typedef定義資料型別
關鍵字typedef用於為系統固有的或者程式設計師自定義的資料型別定義乙個別名
例如:
typedef int integer;
當然也可以為結構體定義乙個別名:
typedef struct student student; 或者
typedef struct student
student;
所以以下語句是等價的,都可以用來定義結構體變數:
student stu1,stu2;
struct student stu1,stu2;
注意:typedef只是為已經存在的一種型別定義乙個新的名字而已,並沒有定義乙個新的資料型別
結構體變數的初始化
結構體變數的成員可以通過將成員的初值置於花括號之內來進行初始化,例如:
student stu1 = };
與下列語句是等價的
struct student stu1 = };
巢狀的結構體
巢狀的結構體意思就是在乙個結構體之內包含了另乙個結構體作為其成員
比如:typedef struct date
date;
typedef struct student
student;
初始化的方式為:
student stu1 = , };
結構體變數的引用
c語言規定,不能將乙個結構體變數作為乙個整體進行輸入輸出操作,只能對每個具體的成員進行輸入輸出操作
.因此,不能寫成:
printf(「%d%s%d」,stu1);
訪問結構體變數要用到成員選擇運算子(或者稱圓點運算子),其訪問格式如下:
結構體變數名 . 成員名
例如:stu1.studentid = 1000002;
當出現結構體巢狀時,必須使用級聯方式訪問結構體成員,即通過成員選擇運算子逐級找到最底層的成員時再引用.例如:
stu1.birthday.year = 1991;
結構體型別的宣告既可以放在所有函式體的外部,可以為所有函式使用,叫做全域性宣告;也可以放在函式體的內部,只能在本函式體內使用,稱為區域性宣告.
c語言複習 結構體和共用體
注 本文是對蘇小紅版c語言程式設計第12章的筆記 結構體的定義 結構體的宣告 主要目的 用已有的資料型別定義乙個新的資料型別 struct 結構體名 結構體名成為結構體標籤 e.g.struct student 注意,結構體模板只是宣告了一種資料型別,並未宣告結構體型別的變數 結構體變數的定義 方法...
C語言複習(3) 結構體共用體
結構體的主要問題在於,結構體的大小,因為結構體需要記憶體對齊 共用體的主要問題在於,共用體 共用低位址,所以共用體的大小取決於最大的的元素位元組數 一 結構體大小的計算 struct a 本來應該是1 4 5,對齊之後是char 1位元組 int 4位元組 是需要補齊三位元組,以保證struct的位...
C語言基礎複習1
不改變其他位的值的狀況下,對某幾個位進行設值。這個場景微控制器開發中經常使用,方法就是先對需要設定的位用 操作符進行清零操作,然 後用 操作符設值。比如我要改變 gpioa odr 的狀態,可以先對暫存器的值進行 清零操作 gpioa odr 0xff0f 將第 4 7 位清 0 然後再與需要設定的...