論壇交流
首頁辦公自動化| 網頁制作| 平面設計| 動畫制作| 數據庫開發| 程序設計| 全部視頻教程
應用視頻: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
編程視頻: C語言視頻教程 | HTML | Div+Css布局 | Javascript | Access數據庫 | Asp | Sql Server數據庫Asp.net  | Flash AS
當前位置 > 文字教程 > C語言程序設計教程
Tag:新手,函數,指針,數據類型,對象,Turbo,入門,運算符,數組,結構,二級,,tc,游戲,試題,問答,編譯,視頻教程

認識C語言中的struct

文章類別:C語言程序設計 | 發表日期:2009-6-24 9:38:45

認識C語言中的struct

在描述struct前,我們先來了解一下what is a type?
A type is a concrete representation of a concept.
For example,the c++ built-in type float with its operations +,-,*,etc.,provides a concrete approximation of the mathematical concept of a real number.

由此,我們可以明確的知道,a type is a concept.這個type包含的不僅僅是一個像int,double這樣的一個符號,更多的是在表示一種concept。一個類型的內涵,還包括其運算方式,其使用范圍,其用法等等一系列的問題。

現在進行分析,struct是什么:
A structure is a collection of one or more variables, possibly of different types.(K&R 《the c programming language》)
由此可以明確的是,struct組合的是一組concept并把它表示為一個concept.由于這種組合的特殊性,雖然方便但在作為一個整體使用,必然要在一定程度上限定其應用.所以有下:
structures may be copied and assigned to, passed to functions,and returned by functions.(K&R 《the c programming language》)
描述struct的使用方式。
以上具體的描述了struct,為之后理解struct有很重要的意義。

struct實際應用的意義:
通常情況下,我們會用一個struct來定義一個樹,定義一個線形表,而不會使用一個類來表示,因為,類是具體對象的抽象,也就是說,我們描述的樹和線形表還不夠具體到需要用類來描述,其不具體到不需要描述其行為(成員函數)的程度,因此,struct為我們提供了一個很好的描述機制,它組合了一組數據,而又不需要來描述足夠具體了實體。


struct基礎說明:
1.The keyword struct introduces a structure declaration, which is a list of declarations enclosed in braces. An optional name called a structure tag may follow the word struct.The variables named in a structure are called members.(K&R 《the c programming language》)
例如:
struct point{
    int x;
    int y;
};
這里point就是structure tag.x,y 就是member.
熟悉各個概念是為了更好的繼續閱讀以后的文章.
這里還可以談及一個有關命名的問題,member的名稱可以于外部變量相同,因為我們總是可以通過上下文進行區分(they can always be distinguished by context.)更明確的說法是,我們都可以通過變量來區別他們應用的成員.其實,這里設計到的是一個有關塊結構的問題,有關塊結構的作用域的問題可以參考<<C++ how to program>>chapter 3(H.M.Deitel,P.J.Deitel著)
附加語法知識:在定義任何自定義類型及其初始化時后面都要在大括號后面加一個";"表示結束.其他情況的大括號后面均無需加";".關于內部類型和自定義類型的概念參見<<the c++ programming language>>.

2.A structure declaration that is not followed by a list of variables reserves no storage; it merely describes a template or shape of a structure.(K&R 《the c programming language》)
也就是說,結構的申明只是在描述一種模板,而不占據空間.

3.初始化問題:
A structure can be initialized by following its definition with a list of initializers, each a constant expression, for the
members:
struct point maxpt = { 320, 200 };  //注意只有在定義的同時可以使用這樣的賦值形式.
任何類型都可以在定義的時候初始化,并且都是用賦值符號來實現.
假如沒有在定義時候初始化,就需要用 varialbe.member(書中是structure-name.member,筆者覺得用variable描述更加妥當)

4.Structures can be nested.
支持嵌套.
eg.:
struct point{
    int x;
    int y;
};
struct rect{
    struct point p1;
    struct point p2;
};

5.函數對結構的使用
eg.:
/* ptinrect: return 1 if p in r, 0 if not */
int ptinrect(struct point p, struct rect r)
{
    return p.x >= r.pt1.x && p.x < r.pt2.x && p.y >= r.pt1.y && p.y < r.pt2.y;
}
以上種種顯示,結構體和一般的變量沒有本質的區別,其不同僅僅是在定義上.
由5中函數對rectangle的判斷,可以分析出在處理長方形問題上的方法,一個長方形可以用其對角的兩個點表示,并且可由這兩個點解決很多實際的問題,比如上面的判斷一個點是否在長方形內部.
在這里我對幾個概念做一下總結性描述:
structure:結構體,通常一個結構體通過一個結構體標記表示(structure tag)
structure varialbe:結構體變量.像一般變量一樣,不同的是其是由結構體定義(申明).
雖然結構體和類在c++中沒有本質的區別,但是我們依然不混用他們,其原因就是他們內在含義的不同,而這幾個概念就是他們含義的一種體現.

6.結構體使用技巧,傳遞指針而非結構體變量本身.
If a large structure is to be passed to a function, it is generally more efficient to pass a pointer than to copy the whole structure.(K&R 《the c programming language》)
這里的高效,體現在傳遞指針不需要為變元的副本拷貝提供過大的開銷,這樣的問題特別出現在巨大的結構體和類上面,對于一個小的結構,雖然從本質上來說使用指針來提高效率作用頗小,但是卻因為一些微妙的原因值得我們去做.關于函數參數的傳遞問題,在函數參數的按引用傳遞和按值傳遞上表現的很明顯,相關內容建議參考<<c++ how to program>>.
前面說過,結構體和一般的變量沒有本質的區別,其不同僅僅是在定義上.所以說,在對于指針的使用方面,結構體造常規使用.唯一特殊的是,為了方便的使用指針,出現了"->"運算符號.使用方法是:指針->成員.
注意:(*pp).x 括號是必須的,因為.的優先級高于*.優先級參見<<the c programming language>>Page:50.
實例: *p->str++ 表示的就是 結構 p 指針中的 str 加1 在指向地址對應的值.注意:*,++是從右到左的.

視頻教程列表
文章教程搜索
 
C語言程序設計推薦教程
C語言程序設計熱門教程
看全部視頻教程
購買方式/價格
購買視頻教程: 咨詢客服
tel:15972130058
打羽毛球的好处