(C)struct結構體指針

結構體指針

  指針結構與指針的關係亦有兩重:其一是在定義結構時,將指針做爲結構中的一個成員;其二是指向結構的指針(稱爲結構指針)。數組

前者同通常的結構成員同樣可直接進行訪問,後者是本節討論的重點。函數

結構指針說明的通常形式是:
      struct (結構類型名稱) * (結構指針變量名);
例如:struct date * pdate, today;
說明了兩個變量,一個是指向結構date的結構指針pdate,today是一個date結構變量。
加密

語句:spa

struct date{指針

      int year;code

      int month;blog

      int day;內存

      };
pdate = &today;
  
get

  通過結構變量today訪問其成員的操做,也能夠用等價的指針形式表示:
      today.year = 2001;  等價於  (*pdate).year = 2001;
因爲運算符"*"的優先級比運算符"."的優先級低,因此必須有"( )"將*pdate括起來。若省去括號,則含義就變成了"*(pdate.year)"。
input

在C語言中,經過結構指針訪問成員能夠採用運算符"->"進行操做,對於指向結構的指針,爲了訪問其成員能夠採用下列語句形式:

      結構指針->成員名;

這樣,上面經過結構指針pdate訪問成員year的操做就能夠寫成:

      pdate->year = 2001;

若是結構指針p指向一個結構數組,那麼對指針p的操做就等價於對數組下標的操做。

  結構指針是指向一種結構類型的指針變量,它是結構體在內存中的首地址。

結構指針具備通常指針的特性,如在必定條件下兩個指針能夠進行比較,也能夠與整數進行加減。

但在指針操做時應注意:進行地址運算時的放大因子由所指向的結構的實際大小決定。

例1:用結構指針改寫加密程序。

#include "stdio.h"


struct table{ char input; char output; }; /* 創建加密對照表 */
struct table translate[ ]={ 'a', 'd', 'b', 'w', 'c', 'k', 'd', ';' , 'e', 'i', 'i', 'a', 'k', 'b', ';', 'c', 'w', 'e' }; /*主函數*/ main( ) { char ch; /* p和pend爲指向結構table的指針 */
    struct table *p; struct table *pend; /* pend指向結構數組translate的最後一個元素 */ pend = & translate[ sizeof(translate)/sizeof(struct table)-1 ]; while ((ch=getchar( )) != '/n') { for (p=translate ; p->input!=ch && p!=pend; p++); if (p->input == ch) putchar(p->output); else putchar(ch); } }

 

讀者能夠將兩個程序對照閱讀,體會結構指針特色。程序中用pend指向數組的最後一個元素。

因爲結構指針和在結構中將指針做爲成員,使得對於結構變量的運算和對成員的操做變得較爲複雜。

因爲取內容的"*"與"."和"->"運算符的優先級與結合性不一樣,使得對成員的訪問和操做又增長了一層難度,

再由於"++"和"--"運算所具備的"先操做"與"後操做"的特性,

以及"++"和"--"運算的結合性,使得"++"和--"運算與結構操做混合在一塊兒時,實際操做會更爲複雜。

相關文章
相關標籤/搜索