本篇文章給大家談?wù)刢語(yǔ)言定義一個(gè)結(jié)構(gòu)體,以及c語(yǔ)言typedef的用法對(duì)應(yīng)的知識(shí)點(diǎn),文章可能有點(diǎn)長(zhǎng),但是希望大家可以閱讀完,增長(zhǎng)自己的知識(shí),最重要的是希望對(duì)各位有所幫助,可以解決了您的問題,不要忘了收藏本站喔。
為什么要用C語(yǔ)言中的結(jié)構(gòu)體我感覺它有些難,不用的話有什么后果
C語(yǔ)言的結(jié)構(gòu)體是非常重要的語(yǔ)法,畢竟當(dāng)初祖師爺發(fā)明C語(yǔ)言的其中一個(gè)首要任務(wù)就是要能提供數(shù)據(jù)的結(jié)構(gòu)化。題主覺得結(jié)構(gòu)體難,估計(jì)是因?yàn)槌鯇W(xué)C語(yǔ)言的緣故。
還記得剛開始接觸C語(yǔ)言的時(shí)候,為了描述一個(gè)平行四邊形的邊長(zhǎng)和對(duì)角線長(zhǎng),我定義了四個(gè)變量:短邊長(zhǎng)a,長(zhǎng)邊長(zhǎng)b,對(duì)角線1長(zhǎng)d1,對(duì)角線2長(zhǎng)d2。
在寫代碼的過程中,發(fā)現(xiàn)又要定義一個(gè)平行四邊形,于是我不得不又定義了四個(gè)變量:a2,b2,d12,d22,結(jié)果變量又多又亂,寫代碼很不舒服,太容易弄混了。當(dāng)時(shí)我還想,幸好沒有第三個(gè),第四個(gè)平行四邊形。
后來(lái),我發(fā)現(xiàn)原來(lái)C語(yǔ)言原來(lái)還有結(jié)構(gòu)體這種語(yǔ)法,不禁感嘆當(dāng)初我那種做法實(shí)在是太笨了。
C語(yǔ)言中的結(jié)構(gòu)體(復(fù)合數(shù)據(jù)類型)C語(yǔ)言初學(xué)者最先接觸到的數(shù)據(jù)類型大多都只具有單一的值,例如整數(shù),字符,真假值,小數(shù),在C語(yǔ)言中(或者說(shuō)編程語(yǔ)言中)這些數(shù)據(jù)類型通常被稱作基本數(shù)據(jù)類型。
事實(shí)上,C語(yǔ)言中還有復(fù)合數(shù)據(jù)類型,那什么是復(fù)合數(shù)據(jù)類型呢?實(shí)際上,你可能已經(jīng)用過復(fù)合數(shù)據(jù)類型了:由許多字符組成的字符串,就是典型的符合數(shù)據(jù)類型。
復(fù)合數(shù)據(jù)類型,其實(shí)就是由基本類型組成的數(shù)據(jù)類型。本節(jié)打算介紹的結(jié)構(gòu)體也是一種復(fù)合數(shù)據(jù)類型,我們不討論結(jié)構(gòu)體的定義,直接看實(shí)例:
用C語(yǔ)言制定一個(gè)描述平行四邊形邊長(zhǎng)和對(duì)角線長(zhǎng)的結(jié)構(gòu)體數(shù)據(jù)類型。
這個(gè)需求是容易實(shí)現(xiàn)的,我們用double類型來(lái)描述“長(zhǎng)度”,那么結(jié)構(gòu)體可以如下定義:
要注意的是,結(jié)構(gòu)體定義完后,大括號(hào)后面要用“;”結(jié)束。parallelogram并不表示一個(gè)變量,它表示一種復(fù)合數(shù)據(jù)類型,structparallelogram{doublea,b,d1,d2;}整體可以看做一個(gè)就像int,double一樣的數(shù)據(jù)類型。那怎么使用它呢?請(qǐng)看下面的C語(yǔ)言代碼實(shí)例:
這樣我們就定義好了p1和p2兩個(gè)結(jié)構(gòu)體變量。事實(shí)上,定義好結(jié)構(gòu)體數(shù)據(jù)類型之后,可以只使用structparallelogram來(lái)定義變量,請(qǐng)看:
這樣定義的p3和p4與上面那種方式定義的p1和p2是一樣的。如果采用上面那種定義方式,parallelogram也可以不寫:
但是這樣就沒有辦法再引用這個(gè)結(jié)構(gòu)體類型了,因?yàn)樗鼪]有名字。定義好變量后,就可以用“.”運(yùn)算符來(lái)訪問結(jié)構(gòu)體的各個(gè)成員了。例如:
很明顯,用結(jié)構(gòu)體來(lái)描述平行四邊形的邊長(zhǎng)問題,比定義多個(gè)double變量方便多了。只需要用structparallelogram定義一個(gè)變量,這個(gè)變量自己內(nèi)部就有平行四邊形的短邊長(zhǎng),長(zhǎng)邊長(zhǎng),對(duì)角線1長(zhǎng)和對(duì)角線2長(zhǎng)了。而且不會(huì)弄混,p1和p2的成員彼此是隔離的,使用“p1.”訪問的變量肯定是p1的。這樣一來(lái),要定義再多的平行四邊形都不怕了。
C語(yǔ)言結(jié)構(gòu)體的初始化我們使用基礎(chǔ)數(shù)據(jù)類型時(shí),初始化很方便,直接賦值就可以了,結(jié)構(gòu)體怎么初始化呢?請(qǐng)看下面的C語(yǔ)言代碼:
這幾種方式都是可以的,只不過要是使用第一種方式定義,p1必須是局部變量。p1若是全局變量,就只能用常數(shù)表達(dá)式定義了。
另外需要特別注意的是,一旦變量定義好了,就不能直接用下面種方式賦值了,但是同類型之間可以賦值:
我們用一個(gè)完整的例子結(jié)束本節(jié),請(qǐng)看下面的C語(yǔ)言代碼:
編譯并執(zhí)行,得到如下結(jié)果:
注意,上面定義的變量a與結(jié)構(gòu)體里的a并不沖突,因?yàn)榻Y(jié)構(gòu)體里的a是用過“.”運(yùn)算符訪問的,編譯器可以區(qū)分,它們屬于不同的命名空間。
好了,學(xué)會(huì)了C語(yǔ)言的結(jié)構(gòu)體,就算是要描述一只貓,也不怕了。
小結(jié)到這里,相信題主應(yīng)該能發(fā)現(xiàn)C語(yǔ)言結(jié)構(gòu)體的方便之處了。事實(shí)上,結(jié)構(gòu)體的用處非常大,如果題主閱讀我的文章,應(yīng)該會(huì)發(fā)現(xiàn),結(jié)構(gòu)體和指針結(jié)合起來(lái),簡(jiǎn)直“毀天滅地”,能夠?qū)崿F(xiàn)各種各樣好玩的特性。
歡迎在評(píng)論區(qū)一起討論,質(zhì)疑。文章都是手打原創(chuàng),每天最淺顯的介紹C語(yǔ)言、linux等嵌入式開發(fā),喜歡我的文章就關(guān)注一波吧,可以看到最新更新和之前的文章哦。
C語(yǔ)言中,結(jié)構(gòu)體作為函數(shù)參數(shù)傳遞,詳解
結(jié)構(gòu)體也是一個(gè)對(duì)象,和系統(tǒng)內(nèi)置的intlong等定義的對(duì)象并沒有區(qū)別的.同樣遵守傳值和傳址兩種情況,建議你看一下有關(guān)C++類的復(fù)制和構(gòu)造和析構(gòu).淺層復(fù)制和深層復(fù)制.在這里一時(shí)說(shuō)不清楚.不過可以簡(jiǎn)單的告訴你,結(jié)構(gòu)體在傳遞的時(shí)候盡量使用址傳遞,如果使用值傳遞的話結(jié)構(gòu)體內(nèi)如果有指針或引用等成員都存在一個(gè)深層復(fù)制的問題.
c++結(jié)構(gòu)體定義和使用
1.c++結(jié)構(gòu)體定義
什么是結(jié)構(gòu)體所謂結(jié)構(gòu)體數(shù)組,是指數(shù)組中的每個(gè)元素都是一個(gè)結(jié)構(gòu)體。在實(shí)際應(yīng)用中,C語(yǔ)言結(jié)構(gòu)體數(shù)組常被用來(lái)表示一個(gè)擁有相同數(shù)據(jù)結(jié)構(gòu)的群體,比如一個(gè)班的學(xué)生、一個(gè)車間的職工等。結(jié)構(gòu)體可以被聲明為變量、指針或數(shù)組等,用以實(shí)現(xiàn)較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)struct結(jié)構(gòu)體類型名{類型名成員名;類型名成員名;……},先聲明結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量名。聲明結(jié)構(gòu)體類型,不分配空間,定義結(jié)構(gòu)體類型變量,就要分配內(nèi)存空間。
2.使用
結(jié)構(gòu)體的作用結(jié)構(gòu)體可以定義自己的數(shù)據(jù)類型,實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)類型
3.
結(jié)構(gòu)體的使用#include<iostream>usingnamespacestd;/*struct是C語(yǔ)言中用來(lái)定義一系列具有相同類型或不同類型的數(shù)據(jù)構(gòu)成的數(shù)據(jù)集合,也叫結(jié)構(gòu)體。C語(yǔ)言中的struct是用戶自定義數(shù)據(jù)類型(UserDefinedType),它是沒有權(quán)限設(shè)置的,它只能是一些變量的集合體,雖然可以封裝數(shù)據(jù)卻不可以隱藏?cái)?shù)據(jù),而且成員不可。
c語(yǔ)言結(jié)構(gòu)體定義方式
C語(yǔ)言結(jié)構(gòu)體定義:
struct為結(jié)構(gòu)體關(guān)鍵字,tag為結(jié)構(gòu)體的標(biāo)志,member-list為結(jié)構(gòu)體成員列表,其必須列出其所有成員;variable-list為此結(jié)構(gòu)體聲明的變量。
結(jié)構(gòu)體是C語(yǔ)言中聚合數(shù)據(jù)類型(aggregatedatatype)的一類。結(jié)構(gòu)體可以被聲明為變量、指針或數(shù)組等,用以實(shí)現(xiàn)較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)體同時(shí)也是一些元素的集合,這些元素稱為結(jié)構(gòu)體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
c語(yǔ)言是什么運(yùn)算符結(jié)構(gòu)體
c語(yǔ)言是數(shù)據(jù)運(yùn)算符結(jié)構(gòu)體。
C語(yǔ)言運(yùn)算符是說(shuō)明特定操作的符號(hào),它是構(gòu)造C語(yǔ)言表達(dá)式的工具。C語(yǔ)言的運(yùn)算異常豐富,除了控制語(yǔ)句和輸入輸出以外的幾乎所有的基本操作都為運(yùn)算符處理。
除了常見的三大類,算術(shù)運(yùn)算符、關(guān)系運(yùn)算符與邏輯運(yùn)算符之外,還有一些用于完成特殊任務(wù)的運(yùn)算符,比如位運(yùn)算符。
C語(yǔ)言結(jié)構(gòu)體(Struct)從本質(zhì)上講是一種自定義的數(shù)據(jù)類型,只不過這種數(shù)據(jù)類型比較復(fù)雜,是由int、char、float等基本類型組成的。
c語(yǔ)言中struct與union有什么區(qū)別
在存儲(chǔ)多個(gè)成員信息時(shí),編譯器會(huì)自動(dòng)給struct的每個(gè)成員分配存儲(chǔ)空間,所以struct可以存儲(chǔ)多個(gè)成員信息,而union的每個(gè)成員都用同一個(gè)存儲(chǔ)空間。
對(duì)union的不同成員賦值,將會(huì)對(duì)其他成員重寫,這些成員原來(lái)的值就不存在了,而對(duì)struct的不同成員進(jìn)行賦值是互不影響的。關(guān)于c語(yǔ)言定義一個(gè)結(jié)構(gòu)體,c語(yǔ)言typedef的用法的介紹到此結(jié)束,希望對(duì)大家有所幫助。