結構體(構造型別:陣列):
陣列:只能由多個相同型別的資料構成
結構體:可以由多個不同的型別的資料
結構體型別 結構體變數名
1.定義結構體型別
struct person
;2.根據結構體型別,定義結構體變數
struct person p = ; //p為結構體變數
單獨賦值:
p.age = 30;
p.name = "rose";
只能在定義結構體/陣列的同時賦值
錯誤寫法:
struct person p2;
p2 =
正確寫法:
struct person p2 = ;
struct person p2 = ;
記憶體分析:
1.定義結構體型別;
struct date
;// 僅僅定義型別,並不會分配儲存空間
2.定義結構體變數:// 真正分配儲存空間
struct date d1 = ;
int s = sizeof(d1);//此結構體型別占用12位元組
printf("%p %p %p", &d1.year, &d1.month, &d1.day);
//輸出位址,之間相差4個位元組
d2 = d1; //會將d1所有成員值賦給d2對應值
struct student stu
;//佔16個位元組 ,必須是最大位元組的倍數
//補齊演算法(對其演算法)
定義結構體變數(3種方式):
1.先定義型別,在定義變數
struct student stu
;struct student stu =
2.定義型別的同時定義變數
struct person
stu; // 定義型別的同時,定義變數
結構體型別不能重複定義
3.定義型別的同時定義變數(省略了型別名稱)
structstu; // 這樣定義也是正確的
結構體型別也是有作用域的,從定義型別的哪一行開始,一直到**塊結束
結構體型別的作用域:
定義在函式外面,全域性有效(從定義型別的那行開始,一直到檔案結尾)
定義在函式(**塊)內部,區域性有效(從定義型別的那行開始,一直到**塊結束)
結構體陣列:
struct rankrecord
;//int ages[3] = ;
struct rankrecord records[3] = ,,
};records[0] = ;//這樣錯誤
record[0].no = 4;
for (int i=1; i<3; i++)
指向結構體的指標:
struct student
;struct student stu = ;
struct student *p;
p = &stu;
//第一種方式
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 *p;
利用指標訪問結構體的成員:
(*p).成員變數
p->成員變數
結構體的巢狀:
int main()
;struct student
;struct studend stu = , };
}
黑馬程式設計師 C語言 結構體
android培訓 ios培訓 期待與您交流!結構體的作用 結構體是一種構造型別,使用非常頻繁。當我們需要把不同型別的資料構成乙個整體時,便會用到結構體了。結構體型別的定義 注意 在函式裡面或者外面都可以定義 影響作用域為全域性型別或者區域性型別 舉例 struct person 此時只是定義了乙個...
黑馬程式設計師 C語言 結構體 列舉
asp.net unity開發 net培訓 期待與您交流!定義乙個名為student的結構體,定義型別時系統並沒有為它分配記憶體 struct student 儲存的位址是連續的,按定義順序排 定義乙個結構體變數,此時系統為stu分配了記憶體 struct student stu 所有成員佔的儲存空...
《黑馬程式設計師》 結構體struct (C語言)
數 組 只能由多個相同型別的資料組成 結構體 可以由多種不同型別的資料組成 練習 include int main 2.根據結構體型別,定義結構體變數 真正分配儲存空間 struct person p p.age 30 修改結構體元素的值 p.name rose printf age d,name ...