1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      C結(jié)構(gòu)體簡介

      更新時間: 2010-05-18 13:49:45來源: 粵嵌教育瀏覽量:2683

      在學習結(jié)構(gòu)體之前,你會很自然的想到使用如下的變量來描述

      name,height,weight,strong,modfile

      好了現(xiàn)在來給Kula和K分別進行描述,你就需要在變量名上加以區(qū)分對于Kula你有了

      Kula_name, Kula_height, Kula_weight, Kula_strong, Kula_modfile

      對于K,你有了

      K_name, K_height, K_weight, K_strong, K_modfile

      好,設(shè)想你現(xiàn)在要制作KOF2003了,我們需要一個函數(shù)根據(jù)這些信息在戰(zhàn)斗中評價兩位選手,這個函數(shù)看上去像是這樣
      int value(char *name,int height,int weight,int strong,char *modfile);
      當然在實際測試中一個人物的信息可能不止這幾個,也許他有30個之多,我相信你是不會寫一個有30個參數(shù)的函數(shù)的(除非你為Microsoft工作)
      。更糟糕的是,如果由于版本更新發(fā)現(xiàn)30個參數(shù)里有15個是多余的,在修改了函數(shù)定義之后,你還要修改無數(shù)的不只位置函數(shù)調(diào)用。汗!
      現(xiàn)在,結(jié)構(gòu)體來救你了(e文:the struct comes to rescue)。看看如何用結(jié)構(gòu)體定義一個拳皇人物吧。首先我們定義一個結(jié)構(gòu)體類型:
      struct FIGHTER {
      char *name; /*元素1*/
      int height; /*元素2*/
      int weight; /*元素3*/
      int strong; /*元素4*/
      char *modfile; /*元素5*/
      } ;
      這個類型叫FIGHTER他和你用的int在語法上是一樣,他們都是類型。正如你使用int聲明變量一樣,你可以用FIGHTER聲明變量。FIGHTER有一些
      比int特殊的地方,他是結(jié)構(gòu)體。所以聲明變量時,你給跟TC提這件事(在FIGHTER前加上struct關(guān)鍵詞)。聲明變量的方法如下:
      struct FIGHTER Kula,K,Iori,Athena;
      好了,你定義了很多FIGHTER變量。那么如何使用他們呢。對于設(shè)置一個人物我們可以這樣:
      Kula.height = 1.65;
      Kula.weight = 49;
      Kula.strong = 75;
      這里,height,weight,strong是Kula內(nèi)的元素。這就好像同一規(guī)格的不同書包一樣。Kula是這種規(guī)格書包的一種,而height,weight,strong就
      是書包里袋子的名稱。自然書包K里height袋子和書包Kula里height袋子是兩個完全獨立的袋子,他們互不干擾。
      你注意到了Kula和height之間有一個點,專業(yè)一點的稱呼叫 成員運算符(member operator)。當然我還是叫她"點"。
      現(xiàn)在回到value函數(shù)的問題,我們不再需要那么多參數(shù)了。我們只要
      int value(struct FIGHTER fighter);
      這樣,在評價Kula的時候我們使用的是value(Kula)而不是什么value(Kula_height,Kula_weight, ......,汗!);
      一定會發(fā)現(xiàn)結(jié)構(gòu)對于描述一樣帶有很多屬性的東西有天生的優(yōu)越性。比如
      struct POINT {
      int x;
      int y;
      };
      struct RECT {
      int left;
      int top;
      int bottom;
      int right;
      };
      .....
      使用結(jié)構(gòu)體編程可以讓你盡快熟悉OOP(面向?qū)ο蟪绦蛟O(shè)計)。
      不過,...嘻嘻,你沒覺得每次在聲明結(jié)構(gòu)體時的語法中有個struct在前面很不爽
      struct RECT rt;
      我想讓他像聲明int型一樣簡單,打個RECT rt就行了那多好。于是你就打了一個
      RECT rt;
      然后編譯器給了一個驚人的回答:
      Declaration syntax error 定義語法錯誤。
      希望沒有破滅!現(xiàn)在,typedef comes to rescue(c文:typedef來幫忙了)
      記得我們可以用typedef定義類型別名吧,比如unsigned int太長了,不好打,我們用
      typedef unsigned int UINT;
      來定義和unsigned int的同義詞UINT,這樣一來unsigned int a 和 UINT a就是一回事了。現(xiàn)在來看看這個語法結(jié)構(gòu)。
      typedef struct POINT PT;
      呵呵,看到了吧PT和struct POINT 這么長的一個東西成了同義詞了。以后直接用PT就可以了比如struct POINT point就可以用PT point代替了
      ,爽吧!

      其實,還有更爽的,我們把typedef和struct定義結(jié)合在一起。
      typedef struct POINT {
      int x;
      int y;
      } PT;
      更簡單!這種做法是很多程序里慣用的。當然,我們用更好的方法給變量命名,國際上一般采用這樣的命名方法
      typedef struct tagPOINT {
      int x;
      int y;
      } POINT;
      這樣我們就可以直接用 POINT pt1,pt2;定義POINT型的變量了。呵呵看起來是不是和int的語法一樣了。

      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日韩一区欧美二区成人动漫 | 亚州性视频在线 | 亚洲女人天堂免费视频 | 综合久久久久久久久久久 | 青草热在线精品视频99 | 亚洲人成网a在线播放 |