1. 程式人生 > >C 基礎 - 結構

C 基礎 - 結構

rpi oat variable 布局 fis 成員 價格 變量 ria

C語言提供 結構變量(struct variable) 來擴展表示數據的能力。

需求:創建一個圖書目錄。

打印每本書的各種信息: 書名,作者,價格,出版社等。

可以使用C結構來描述數據。

結構聲明:描述了一個結構的組織布局。

1 struct book {            /* structure template: tag is book     */
2     char title[MAXTITL];
3     char author[MAXAUTL];
4     float value;
5 };                       /*
end of structure template */

並沒有描述實際的數據對象,只是描述了對象由什麽組成。

定義結構變量

結構有兩層含義

一、結構布局

二、定義結構變量

/* 把library 聲明為一個使用book結構布局的結構變量 */
struct book library  

或者可以這樣寫

struct book {    /* book標記可以省略 */           
    char title[MAXTITL];
    char author[MAXAUTL];
    float value;
 } library;   /* 聲明的右花括號後跟變量名 */   

/* book類型的結構數組 */
struct book library[MAXBKS];

/* 聲明初始化結構指針 */
struct book * library;

/* 賦值,需要加上取址符 */
library = &suprise;

初始化結構

struct book library = {
  "C Primer Plus",
  "史蒂芬 普拉達",
  "80"
};

還可以使用初始化器來初始化成員

/* 只初始化book結構中 value成員 */
struct
book gift = { .value
= 10.99 }; /* 按照任意順序初始化成員 */ struct book surpise = { .value = 25.99, .author = "Steven", .title = "C Primer Plus" };

訪問結構成員

點來訪問結構中的成員

library.value

.value .author .title 相當於結構的下標。

用指針訪問結構中的成員

如果 him == &library, 那麽him->income

如果 him == &library[0], 那麽him->income 即是 library[0].income

另一種方法: & 與 * 是一組互逆運算

fellow[0].income == (*him).income /*一定要加括號,因為.的優先級高*/

結構嵌套

struct names {      /* 第一個結構 */
  char fist[LNE];
  char last[LEN];
};

struct guy {
  struct names handle;   /* 結構嵌套 */
  char favfood[len];
  char job[LEN];
  float income;
};

struct guy fellow = {
{David Zhang},
"Fish",
"Software Engineer",
"9999.00",
};

/* 訪問嵌套中結構的成員 */
fellow.handle.first

向函數傳遞結構的信息

結構之間可以相互賦值

聯合是一種數據類型

枚舉

typedef

C 基礎 - 結構