相同或者不同型別的變數集合起來,組織在乙個名字之下,有助於組織複雜的資料
/* 結構體型別宣告 */
struct point
;/* 結構體變數宣告/定義 */
struct point pt;
struct point maxpt = ;
/* 結構體成員引用 */
printf("%d,%d", pt.x, pt.y);
/* 結構體巢狀*/
struct rect
;
/* makepoint函式:通過座標x和y構造乙個點 */
struct point makepoint(int x, int y)
/* 結構體作為函式的返回值,整體返回 */
/* canonrect函式:將矩形座標規範化 */
sturct rect cannonrect(struct rect r) /* 函式的引數是結構體 */
struct point pt, *pp;
pp = &pt;
(*pp).x
/* 正確 */
(*pp).y
/* 正確 */
pp->x
/* 正確 */
pp->y
/* 正確 */
pp.x
/* 錯誤 */
pp.y
/* 錯誤 */
/* 直接在{}中按照順序寫入資料 */
struct key
keytab = ;
/* 沒個結構成員,都單獨在乙個{}中初始化,這樣比較清晰 */
struct key keytab = ,,,
...}
/* 利用sizeof 獲取結構體陣列的成員數量 */
#define nkeys (siezof keytab / sizeof(struct key))
#define nkeys (sizeof keytab / sizeof(keytab[0]))
/* 第二種比較好,keytab的型別變了也沒有關係 */
現在只要知道,結構體的準確長度,需要用sizeof返回,並不能自己簡單計算出來即可
/* 二叉查詢樹,儲存字串和出現的次數 */
struct tnode
;struct tnode *talloc(void); /* 給乙個新的結構體分配空間的函式 */
char *strdup(char*); /* 賦值字串函式 */
/* addtree函式:在p的位置或者p的下方增加乙個w節點 */
/* 這個函式核心有2個功能:1. 傳入的節點指標p並不是null,那麼在樹中移動;2. 如果移動到null的節點,建立乙個新的節點 */
/* 移動過程中函式內部p並無變化,原樣返回 */
/* 建立節點的情況下,p從null變成乙個已經分配了空間的節點的指標,返回給父節點 */
struct tnode *addtree(struct tnode *p, char *w)
else
if ((cond = strcmp(w, p->word)) == 0)
else
if (cond < 0)
else
return p;
}/* treeprint函式:按照順序列印樹p */
void treeprint(struct tnode *p)
}#include
/* talloc函式:建立乙個tnode*/
struct tnode *talloc(void)
/* strdup函式:將字串複製到乙個新的安全位置 */
char *strdup(char *s)
return p;
}
typedef建立新的資料型別名,好處
typedef int length;
typedef char *string;
length len, maxlen;
length *lengths;
string p, lineptr[maxlines], alloc(int);
int strcmp(string, string);
p = (string)malloc(100);
typdef struct tnode *treeptr;
typedef
struct tnode
treenode;
treeptr talloc(void)
typedef int (*pfi)(char * , char *);
pfi strcmp, numcmp;
struct u;
}symtab[nsym];
symtab[i].u.ival
*symtab[i].u.sval
symtab[i].u.sval[0]
/* 遮蔽碼操作方式*/
#define keyword 01
#define external 02
#define static 04
flags |= external | static; /* 設定某些位*/
flags &= ~(external | static); /* 清掉某些位*/
if ((flags & (external | static)) == 0) ...
/* 位欄位操作方式*/
structflags;
flags.is_extern = flags.is_static = 1;
flags.is_extern = flags.is_static = 0;
if (flags.is_extern == 0 && flags.is_static == 0) ...
選擇結構 C語言程式設計
一 實驗目的 1.正確使用關係表示式和邏輯表示式表示條件 2.掌握選擇語句if else和switch語句的使用方法 3.掌握分支結構程式設計。二 實驗內容和步驟 1 分析並修改下面程式錯誤,使之能夠正常執行。錯誤 一 下面的這個程式是當a和b的值相等的情況下輸出 a和b相等 而a與b的值不相等的話...
結構體 C語言程式設計
一 實驗目的 1 學習掌握結構化資料的程式設計使用 二 實驗內容和步驟 1.分析並修改下面程式錯誤,使之能夠正常執行。錯誤 一 程式實現輸出圖書的名字和單價,錯誤 如下 include struct book float price char name 10 名字 int main void str...
C語言程式設計 分支結構
c語言的分支結構主要有兩種,分別為if else和switch,兩種分支結構可以分別巢狀使用。if.else 在c語言中把任何非零和非空的值都假設為true,把零或null假定為false。if.else 中其實可以再細分if if巢狀,if.else 巢狀 語法格式 if else if else...