C程式語言 K R 第六章學習筆記

2021-06-23 03:05:34 字數 2128 閱讀 3277

6.1

點是最基本的物件,假定用 x 與 y 座標表示它,且 x、y 的座標值都為整數。

採用結構存放這兩個座標:

struct  point ;

結構可以巢狀。我們可以用對角線上的兩個點來定義矩形:

struct  rect ;

struct  rect  screen;

可以用語句 screen.pt1.x 引用 screen 的成員 pt1 的 x 座標。

6.2

/* makepoint: make a point from x and y components */

struct point makepoint(int x, int y)

struct rect screen;

struct point middle;

struct point makepoint(int, int);

screen.pt1 = makepoint(0, 0);

screen.pt2 = makepoint(xmax, ymax);

middle = makepoint((screen.pt1.x + screen.pt2.x)/2, (screen.pt1.y + screen.pt2.y)/2);

/* addpoints: add two points */

struct addpoint(struct point p1, struct point p2)

/* ptinrect: return 1 if p in r, 0 if not */

int prinrect(struct point p, struct rect r)

#define min(a, b) ((a) < (b) ? (a) : (b))

#define max(a, b) ((a) > (b) ? (a) : (b))

/* canonrect: canonicalize coordinate of rectangle */

struct rect canonrect(struct rect r)

如果傳遞給函式的結構很大,使用指標方式的效率通常比複製整個結構的效率要高。結構指標類似於普通變數指標。

struct  point  *pp;

將pp定義為乙個指向struct  point 型別物件的指標。如果 pp 指向乙個 point 結構,那麼 *pp 即為該結構,而 (*pp).x 和 (*pp).y 則是結構成員。可以按照下例中的方式使用 pp:

struct  point origin,  *pp;

pp = &origin; 

printf("origin  is  (%d, %d)\n",  (*pp).x,  (*pp).y);

其中,(*pp).x 中的圓括號是必須的,因為結構成員運算子 「.」 的優先順序比 「*」 的優先順序高。

結構指標的使用頻度非常高,為了使用方便,c 語言提供了另一種簡寫方式。假定 p 是乙個指向結構的指標,可以用

p->結構成員

這種形式引用相應的結構成員。

6.4

#include #include #include #define	maxword 100

int getword(char *, int);

struct key *binsearch(char *, struct key *, int);

/* count c keywords; pointer version */

int main()

/* binsearch: find word in tab[0] ... tab[n-1] */

struct key *binsearch(char *word, struct key *tab, int n)

return null;

}

我們無法簡單的通過下列表示式計算中間元素的位置:

mid = (low + high) / 2;  /* wrong */

這是因為,兩個指標之間的加法運算是非法的。但是,指標的減法運算卻是合法的。high-low的值就是陣列元素的個數,

因此,可以用下列表示式:

mid = low + (high-low) / 2;

C語言 第六章

c語言 第六章 飄過的小牛 部落格頻道 csdn.net 一 變數儲存空間的分類順序 先宣告的變數後分配儲存空間 撤銷的順序與之相反 先建立的後撤銷。這種機制就稱為棧機制,好像往乙個只能允許進出乙個盤子的桶裡放盤子,先放進的後拿出。在c 語言程式中,區域性變數就被分配在棧區,而且是以高階為棧底建立的...

第六章 學習筆記

1.引數分為位置引數和關鍵字引數。def func positional para x,y,z passdef func keyword para kwd1 1,kwd2 4,kwd3 9 pass2.1 當有多個位置引數時,可以用乙個星號來收集引數,函式內使用這些位置引數時可以通過for 迴圈依次...

第六章學習筆記

人員中斷 程序中斷 硬體中斷 程序的陷阱錯誤 按 ctrl c 組合鍵通常會導致當前執行的程序終止。原因如下 ctrl c組合鍵會生成乙個鍵盤硬體中斷。鍵盤中斷處理程式將ctrl c組合鍵轉換為sigint 2 訊號,傳送給終端上的所有程序,並喚醒等待鍵盤輸入的程序。在核心模式下,每個程序都要檢查和...