1. 程式人生 > >C結構體學習

C結構體學習

目錄:

C結構體學習

  • 學習目標:
    1. 結構體的概念及用途
    2. 結構體型別的宣告及其字長
    3. 結構體變數的定義,訪問和賦值
    4. 結構體陣列和結構體指標的使用

初識結構體

宣告結構體型別

  1. 格式:

     struct 結構體名{
     		資料型別1  結構體成員1:
     		資料型別2  結構體成員2:
     		資料型別3  結構體成員3:
     		...
     }
    
  2. 支援的資料型別

    • 內建型別

      • char
      • short
      • int
      • float
      • double
    • 自定義型別

      • struct結構體
      • union聯合體
      • enum列舉型別
  3. for example:

    struct person_infor{
    	char name[SIZE_IN]; 			/*姓名*/
    	int age;						/*年齡*/
    	char gender;					/*性別*/
    	char profession[SIZE_IN];		/*職業*/
    	char address[SIZE_IN];			/*地址*/
    	char telephone[SIZE_IN];		/*電話*/
    }
    

定義結構體變數

  1. 宣告結構體型別,並定義結構體變數

    struct persion_infor{
    	char name[SIZE_IN];
    	int age;
    	char gender;
    	...
    }
    
    struct persion_infor Raul,Philip;
    struct persion_infor Joe;
    
  2. 不宣告結構體型別,直接定義結構體變數

    struct{
    	char name[SIZE_IN];
    	int age;
    	char gender;
    	...
    } Raul,Philip,Joe;
    
  3. 使用typedef得到簡化的結構體型別名,再定義結構體變數

    typede struct persion_infor{
    	char name[SIZE_IN];
    	int age;
    	char gender;
    	...
    } infor;
    infor  Raul,Phliip;
    
    

    補充下 typedel用法:

    	typedef  oldType  new Type;
    	typedef    char  myChar;
    	myChar s="hello world";
    	typedel struct{}       infor;
    		//  原型別		新型別
    	infor  student_infor; //宣告變數
    

結構體的儲存形式

  1. 結構體的本質
    1. 就是物理連續的線性資料結構
  2. 優化:
    1. 為了方便定址,一般以其本身資料型別的位元組長度為基本單位對齊。(類似mysql的char)
    2. 分配策略可以調整,通過使用#pragma pack 預處理命令來改變對齊規則(後面在瞭解下)
    3. 示例:
#

結構體的應用

訪問結構體成員

初始化結構體變數

結構體變數的賦值

結構體陣列

定義結構體陣列

初始化結構體陣列

結構體陣列示例

結構體指標

指向結構體變數的指標

指向堆空間的結構體指標

指向結構體陣列元素的指標