結構和其他資料形式

m0_52273234發表於2020-12-20

結構陣列

  1. 宣告:struct book library[MAXBKS]
  • library 為一個內含MAXBKS個元素的陣列。是陣列名
  • 陣列中的每個元素都是一個book型別的結構變數。
  1. 標識結構陣列中的成員 library[3].value
  2. 巢狀結構 — 訪問時用兩次點運算子fellow.handle.first

指向結構的指標

  1. 宣告:struct guy * him
  • 關鍵字 struct 其次時結構標記 guy 然後 * 後跟的是指標名
  • 指標him現在可以指向任意現有的guy型別的結構。
  • 例:若barney 是一個guy型別的結構變數 him = &barney;

與陣列不同,結構變數名不是結構的地址,要加上&符

  1. 用指標訪問成員
  • 例:him指向fellow[0],通過him獲得fellow[0]的值
    him->income 就是 barney.income
    him是一個指標 但是him->income是該指標所指向結構體的一個成員 ,所以,him->income是一個float型別的變數。
  • 第二種
    *him==fellow[0]
    felllow[0].income = (*him).income

向函式傳遞結構的資訊

  1. 傳遞成員
    只關心傳入資料的型別,若要在函式中修改它的值,在前面加上&
  2. 傳遞結構的地址
    必須使用&運算子來獲取結構的地址
double sum(const struct funds * money)
{
	return (money->bankfund + money->savefund);
}
  1. 傳遞結構 (副本)
  2. 其他結構特徵
  • 允許把一個結構賦值給另一個結構(即使成員是是陣列,也能完成賦值)
  • 函式不僅能吧結構本身作為引數傳遞,還能把結構作為返回值

使用結構陣列的函式

  1. 函式要處理一個結構陣列,陣列名就是該陣列的地址,可以把它傳遞給函式。
  2. 可以用陣列表示法訪問陣列中的其他結構
    ` sum(&jones[0],N)
  3. 由於sum函式不能改變原始資料,該函式使用 const

聯合簡介

聯合(union)是一種資料型別,它能在同一個記憶體空間中出儲存不同的資料型別(不是同時儲存)

注:聯合只能儲存一個值。

  1. 利用指標訪問結構使用->一樣,用指標訪問聯合也要適應->運算子
    pu = &fit; x = pu->digit
    2.常用方法 用一個成員把值儲存在一個聯合中,然後用另一個成員檢視內容。

列舉型別

使用enum關鍵字,建立一個新型別並指定他可具有的值
(實際上,enum常量是int型別,因此,只要能使用int型別的地方就可以使用列舉型別)
目的:提高程式可讀性

例如
enum srectrum{red,orange,yellow,green,blue};
enum spectrum color

  1. 第一個宣告建立了spetrum作為標誌名,允許把enum spetrum作為一個型別名使用。
    花括號內的識別符號列舉了spectrum變數可能有的的值。
  2. 第二個宣告使color作為該型別的變數。
  • enum常量blue red 從技術層面上看,它們是int型別的常量
  • 預設值,列舉列表中的常量都被賦予0,1,2等
  • 賦值 在列舉宣告中,可以為列舉常量指定整數值
    enum levels {low = 100,medium = 500 ,high = 2000};

typedef 簡介

typedef 工具是一個高階資料特徵,利用typedef可以為某一型別自定義名稱。與#define類似,但有三點不同

  1. 與#define不同,typedef建立的符號名只受限於型別,不能用於值
  2. typedef由編譯器解釋,不是前處理器
  3. 在其受限範圍內,typedef比#define更靈活
  • 假設要用BYTE表示1位元組的陣列。只需像定義個char型別變數一樣定義BYTE,然後在定義前面加上關鍵字typedef即可:
    typedef unsigned char BYTE;
    隨後,便可用BYTE來定義變數
    BYTE x,y[10],*z ;
    該定義的作用域取決於typedef定義所在的位置。如果定義在函式中,就具有區域性作用域,受限於定義所在的函式。

函式

函式名代表函式的地址,可以把函式的地址作為引數傳遞給其他函式,然後這些函式就可以使用被指向的函式。

如果把待定函式的地址賦給一個名為pf的函式指標,可以通過以下方式

#include<math.h> //提供sin()函式的原型:double sin(double)
...
double (*pdf)(double);
double x;
pdf = sin;
x = (*pdf)(1.2); // 呼叫sin(1.2)
x = pdf(1.2);   //同樣呼叫sin(1.2)

相關文章