結構和其他資料形式
結構陣列
- 宣告:
struct book library[MAXBKS]
- library 為一個內含MAXBKS個元素的陣列。是陣列名
- 陣列中的每個元素都是一個book型別的結構變數。
- 標識結構陣列中的成員
library[3].value
- 巢狀結構 — 訪問時用兩次點運算子
fellow.handle.first
指向結構的指標
- 宣告:
struct guy * him
- 關鍵字 struct 其次時結構標記 guy 然後 * 後跟的是指標名
- 指標him現在可以指向任意現有的guy型別的結構。
- 例:若barney 是一個guy型別的結構變數 him = &barney;
與陣列不同,結構變數名不是結構的地址,要加上&符
- 用指標訪問成員
- 例:him指向fellow[0],通過him獲得fellow[0]的值
him->income
就是barney.income
him是一個指標 但是him->income是該指標所指向結構體的一個成員 ,所以,him->income是一個float型別的變數。 - 第二種
*him==fellow[0]
felllow[0].income = (*him).income
向函式傳遞結構的資訊
- 傳遞成員
只關心傳入資料的型別,若要在函式中修改它的值,在前面加上& - 傳遞結構的地址
必須使用&運算子來獲取結構的地址
double sum(const struct funds * money)
{
return (money->bankfund + money->savefund);
}
- 傳遞結構 (副本)
- 其他結構特徵
- 允許把一個結構賦值給另一個結構(即使成員是是陣列,也能完成賦值)
- 函式不僅能吧結構本身作為引數傳遞,還能把結構作為返回值
使用結構陣列的函式
- 函式要處理一個結構陣列,陣列名就是該陣列的地址,可以把它傳遞給函式。
- 可以用陣列表示法訪問陣列中的其他結構
` sum(&jones[0],N) - 由於sum函式不能改變原始資料,該函式使用 const
聯合簡介
聯合(union)是一種資料型別,它能在同一個記憶體空間中出儲存不同的資料型別(不是同時儲存)
注:聯合只能儲存一個值。
- 利用指標訪問結構使用->一樣,用指標訪問聯合也要適應->運算子
pu = &fit; x = pu->digit
2.常用方法 用一個成員把值儲存在一個聯合中,然後用另一個成員檢視內容。
列舉型別
使用enum關鍵字,建立一個新型別並指定他可具有的值
(實際上,enum常量是int型別,因此,只要能使用int型別的地方就可以使用列舉型別)
目的:提高程式可讀性
例如
enum srectrum{red,orange,yellow,green,blue};
enum spectrum color
- 第一個宣告建立了spetrum作為標誌名,允許把enum spetrum作為一個型別名使用。
花括號內的識別符號列舉了spectrum變數可能有的的值。 - 第二個宣告使color作為該型別的變數。
- enum常量blue red 從技術層面上看,它們是int型別的常量
- 預設值,列舉列表中的常量都被賦予0,1,2等
- 賦值 在列舉宣告中,可以為列舉常量指定整數值
enum levels {low = 100,medium = 500 ,high = 2000};
typedef 簡介
typedef 工具是一個高階資料特徵,利用typedef可以為某一型別自定義名稱。與#define類似,但有三點不同
- 與#define不同,typedef建立的符號名只受限於型別,不能用於值
- typedef由編譯器解釋,不是前處理器
- 在其受限範圍內,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)
相關文章
- 【資料結構】堆的建立以及其他操作!!!資料結構
- 結構化資料、半結構化資料和非結構化資料
- 棧結構-物件形式物件
- C++資料結構和pb資料結構的轉換C++資料結構
- Set和Map資料結構。資料結構
- 資料結構——樹和森林資料結構
- 資料結構:順序結構和鏈式結構的資料型別定義資料結構資料型別
- 結構體中套用其他_結構體結構體
- 【資料結構——圖和圖的儲存結構】資料結構
- 資料結構 & 演算法 in Swift (一):Swift基礎和資料結構資料結構演算法Swift
- 資料結構—棧和佇列資料結構佇列
- 資料結構和演算法資料結構演算法
- 資料結構(棧和佇列)資料結構佇列
- 【資料結構】--棧和佇列資料結構佇列
- 演算法和資料結構演算法資料結構
- 【PHP資料結構】圖的概念和儲存結構PHP資料結構
- 【資料結構篇】認識資料結構資料結構
- BIOS資料區和其他固定資料區iOS
- 資料結構和演算法總結--棧資料結構演算法
- 資料結構之陣列和連結串列資料結構陣列
- 資料結構和演算法-堆資料結構演算法
- 大資料的結構和特點大資料
- python字典和結構化資料Python
- JavaScript資料結構和演算法JavaScript資料結構演算法
- 聊聊資料結構和演算法資料結構演算法
- 內建資料結構集合和字典資料結構
- mysql複製表結構和資料MySql
- 資料結構之棧和佇列資料結構佇列
- 資料結構和演算法分析資料結構演算法
- sql複製表結構和資料SQL
- 資料結構小白系列之資料結構概述資料結構
- 資料結構?資料結構
- 資料結構資料結構
- Postgresql資料庫體系結構-程式和記憶體結構SQL資料庫記憶體
- 資料結構與演算法-資料結構(棧)資料結構演算法
- MySQL資料庫結構和資料的匯出和匯入 (轉)MySql資料庫
- Unity和MySQL資料庫連線 (一 NGUI形式 )UnityMySql資料庫NGUI
- 資料結構和演算法:遞迴資料結構演算法遞迴