陣列:只能由多個相同型別的資料構成
結構體:可以由多個不同型別的資料構成
1.定義結構體型別
struct person
; /* 錯誤寫法
struct person p2;
p2 = ;
*/結構體要在定義的時候初始化
注意: 1.定義結構體型別(並不會分配儲存空間)
2.定義結構體變數(真正分配儲存空間)
/ 補齊演算法(對齊演算法)
// 結構體所占用的儲存空間 必須是 最大成員位元組數的倍數
注意,如果定義了兩個結構體變數,下面的操作 會將d1所有成員的值對應地賦值給d2的所有成員
d2 = d1;
d2.year = 2010; // 改變第二個結構體的成員變數並不會影響第乙個的 1.
定義結構體變數的3種方式
1> 先定義型別,再定義變數(分開定義)
struct student
; struct student stu;
2> 定義型別的同時定義變數
struct student
stu;
struct student stu2;
3> 定義型別的同時定義變數(省略了型別名稱)
struct
stu;
2.
結構體型別的作用域
1> 定義在函式外面:全域性有效(從定義型別的那行開始,一直到檔案結尾)
2> 定義在函式(**塊)內部:區域性有效(從定義型別的那行開始,一直到**塊結束)
*結構體型別不能重複定義
結構體陣列:
1.定義跟結構體變數一樣,結構體陣列也有3種定義方式 1.
struct student ;
struct student stu[5];//定義1
2.
struct student stu[5];//定義2
3.
struct stu[5]; / / 定義3
上面3種方式,都是定義了乙個變數名為stu的結構體陣列,陣列元素個數是5
2.初始化
struct stu[2] = , };
也可以用陣列下標訪問每乙個結構體元素,跟普通陣列的用法是一樣的 。
指向結構體的指標
1.指向結構體的指標的定義
struct student *p;
2.利用指標訪問結構體的成員
1> (*p).成員名稱
2> p->成員名稱
// 結構體變數
struct student stu = ;
// 指標變數p將來指向struct student型別的資料
struct student *p;
// 指標變數p指向了stu變數
p = &stu;
p->age = 30;
// 第一種方式
printf("age=%d, no=%d\n", stu.age, stu.no);
// 第二種方式
printf("age=%d, no=%d\n", (*p).age, (*p).no);
// 第三種方式
printf("age=%d, no=%d\n", p->age, p->no);
結構體和函式:
如果結構體作為函式引數,只是將實參結構體所有成員的值對應地賦值給了形參結構體的所有成員
修改函式內部結構體的成員不會影響外面的實參結構體
結構體的巢狀定義:
// 型別
struct student
;
ZY C語言指標
應用場景 基本資料型別傳入函式引數不能改變其值,用指標就可以變數型別 變數名 格式 變數型別 變數名 定義了乙個指標變數p 指標變數只能儲存位址 指標就乙個作用 能夠根據乙個位址值,訪問對應的儲存空間 指標變數p前面的int 指標變數p只能指向int型別的資料 指標的寫法 int p int a 9...
結構體巢狀結構體 C語言結構體
希望今年夏天的遺憾能成為你秋天的驚喜。網易雲熱評 一 結構體概念 可以簡單理解為把不同資料型別放到一起的陣列 二 結構體宣告與初始化 1 先宣告結構體型別再定義變數 2 同時定義變數 3 直接定義結構體型別變數 include include include include struct aiyou...
《IOS C語言》結構體 結構體陣列
一 結構體宣告 typedef struct 結構體名 結構體別名 如 typedef struct stu stu 二 結構體變數定義 結構體變數 由結構體型別修飾的變數,稱為結構體變數 定義格式 1 struct 結構體名 變數名 2 結構體別名 變數名 這種方法更好,簡便 如 struct s...