------Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練、期待與您交流! -------
結構體屬于構造類型 結構體由多個不同類型組合成 數組由多個相同類型的資料構成 結構體類型作用域:從定義類型的那一行開始,一直熬代碼塊結束 結構體類型是本身是不存在的需要手動建立 1,定義結構體類型 定義結構體時并不會配置設定存儲空間
struct Person
{
int age;
double height;
char *name;
}
2, 根據結構體類型定義結構體變量
struct Person p = {20,1.55,"jack"};
隻能在定義結構體變量時一次性指派或者使用p.age的方式指派 這将20指派給age,1.55指派給height,jack指派給name 或者使用變量名稱.屬性的方法指派
p.age = 30;//将30指派給age
p.name = "jack";//将'jack'指派給name
p.height = 1.55;//将1.55指派給height
注意點:
結構體的名稱最好有意義; 如果有兩個結構體變量p1,p2; 如果執行p1 = p2;會将p2的所有成員的值對應的指派給p1的所有成員
補齊算法:結構體所占用的存儲空間,必須是最大成員位元組數的倍數
結構體的其他用法: 定義類型同時定義結構體變量
struct Person
{//定義Person的三個屬性
int age;
double height;
char *name;
} p1;
注意:結構體類型不能重複定義
結構體數組: 結構體數組的初始化和數組的初始化一樣,如果想改變數組裡的内容不能直接用:
例如:
struct Record{
int no;
charchar *name;
int score;
};
struct Record rank[3]=
{
{1,"jake",500},
{2,"rose",300},
{3,"jim",100}
};
錯誤寫法:
rank[0] = {4,"whb",900};
//正确寫法
rank[0] .no=4;
rank[0] .name="whb";
rank[0] .sroce=900;
結構體指針: 1,指向結構體的指針的定義 2,利用指針通路結構體的成員 例如:
int main()
{
struct Student
{
int no;
int age;
}
//結構體變量
struct Student stu = {1,20};
//指針變量p将來隻想struct Student類型的資料
struct Student *p;
//指針變量p指向了stu變量
p = &stu;
有三種方式可以通路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);
結構體的嵌套: 概念:在結構體中調用結構體 注意:結構體的嵌套不能自己包含自己
例如:
int main()
{
struct Date //定義結構體Date
{
int year;
int month;
int day;
}
struct Student//定義結構體Student
{
int no;
struct Date birtDay;
struct Date rDay;
}
struct Student p = {1,{2000,9,10},{2012,9,10}};
printf("year = %d,month=%d,day= %d\n",stu.birtDay.year,stu.birtDay.month,stu.birtDay.day);
return 0;
}