天天看點

黑馬程式員——C語言基礎——結構體

  ------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;
     }
           

繼續閱讀