C程式語言(四)結構

2021-08-05 20:26:02 字數 3098 閱讀 6920

相同或者不同型別的變數集合起來,組織在乙個名字之下,有助於組織複雜的資料

/* 結構體型別宣告 */

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...