手把手教你c語(yǔ)言基礎(chǔ)語(yǔ)法——結(jié)構(gòu)體

1.關(guān)于c語(yǔ)言結(jié)構(gòu)體的引入

在前面已經(jīng)介紹了整形(int粹湃,long,….)泉坐,浮點(diǎn)型(flaot为鳄,double),字符型(char)腕让,還介紹了數(shù)組(存儲(chǔ)一組具有相同類(lèi)型的數(shù)據(jù))济赎,字符串。但是在實(shí)際問(wèn)題中只有這些數(shù)據(jù)類(lèi)型是不夠的记某,有時(shí)候我們需要其中的幾種一起來(lái)修飾某個(gè)變量司训,例如一個(gè)學(xué)生的信息就需要學(xué)號(hào)(字符串),姓名(字符串)液南,年齡(整形)等等壳猜,這些數(shù)據(jù)類(lèi)型都不同但是他們又是表示一個(gè)整體,要存在聯(lián)系滑凉,那么我們就需要一個(gè)新的數(shù)據(jù)類(lèi)型统扳。

——結(jié)構(gòu)體:就將不同類(lèi)型的數(shù)據(jù)存放在一起,作為一個(gè)整體進(jìn)行處理畅姊。

2.c語(yǔ)言使用結(jié)構(gòu)體變量進(jìn)一步加強(qiáng)了表示數(shù)據(jù)的能力咒钟。

2.1結(jié)構(gòu)體聲明

//申明一個(gè)結(jié)構(gòu)體

struct book

{

char title[MAXTITL];//一個(gè)字符串表示的titile 題目 ;

char author[MAXAUTL];//一個(gè)字符串表示的author作者 若未;

float value;//一個(gè)浮點(diǎn)型表示的value價(jià)格朱嘴;

};//注意分號(hào)不能少,這也相當(dāng)于一條語(yǔ)句粗合;

這個(gè)聲明描述了一個(gè)由兩個(gè)字符數(shù)組和一個(gè)float變量組成的結(jié)構(gòu)體萍嬉,但是注意,他并沒(méi)有創(chuàng)建一個(gè)實(shí)際的數(shù)據(jù)對(duì)象隙疚,而是描述了一個(gè)組成這類(lèi)對(duì)象的元素壤追,【因此,我們也有時(shí)候?qū)⒔Y(jié)構(gòu)體聲明叫做模板供屉,因?yàn)樗蠢粘鰯?shù)據(jù)該如何存儲(chǔ)行冰,并沒(méi)有實(shí)例化數(shù)據(jù)對(duì)象】。


下面介紹一下上面的結(jié)構(gòu)體聲明伶丐;

1.首先使用關(guān)鍵字struct悼做,他表示接下來(lái)是一個(gè)結(jié)構(gòu)體。

2.后面是一個(gè)可選的標(biāo)志(book)撵割,它是用來(lái)引用該結(jié)構(gòu)體的快速標(biāo)記贿堰。因此我們以后就會(huì)可以這樣創(chuàng)建數(shù)據(jù)對(duì)象

struct book library辙芍;//把library設(shè)為一個(gè)可以使用book結(jié)構(gòu)體的結(jié)構(gòu)體變量啡彬,則library這個(gè)變量就包含了其book結(jié)構(gòu)體中的所有元素

3.接下來(lái)就是一個(gè)花括號(hào)羹与,括起了結(jié)構(gòu)體成員列表,及就是每個(gè)成員變量庶灿,使用的都是其自己的聲明方式來(lái)描述纵搁,用分號(hào)來(lái)結(jié)束描述;

列如往踢;char title[MAXTITL];字符數(shù)組就是這樣聲明的腾誉,用分號(hào)結(jié)束;

注意:其中每個(gè)成員可以使用任何一種c數(shù)據(jù)結(jié)構(gòu)甚至是其他的結(jié)構(gòu)體峻呕,也是可以的利职;

4.在結(jié)束花括號(hào)后的分號(hào)表示結(jié)構(gòu)體設(shè)計(jì)定義 的結(jié)束。

2.2關(guān)于其struct聲明的位置瘦癌,也就是這段代碼要放到哪里猪贪。同樣這也是具有作用域的。

這種聲明如果放在任何函數(shù)的外面讯私,那么則可選標(biāo)記可以在本文件中热押,該聲明的后面的所有函數(shù)都可以使用。如果這種聲明在某個(gè)函數(shù)的內(nèi)部斤寇,則它的標(biāo)記只能咋內(nèi)部使用桶癣,并且在其聲明之后;

2.3關(guān)于我們不斷說(shuō)的娘锁,標(biāo)記名是可選的牙寞,那么我們什么時(shí)候可以省略,什么時(shí)候一定不能省略呢莫秆?

如果是上面那種聲明定義的方法碎税,并且想在一個(gè)地方定義結(jié)構(gòu)體設(shè)計(jì),而在其他地方定義實(shí)際的結(jié)構(gòu)體變量那么就必須使用標(biāo)記馏锡;

可以省略雷蹂,設(shè)計(jì)的同時(shí)就創(chuàng)建該結(jié)構(gòu)體變量,但是這種設(shè)計(jì)是一次性的杯道,

還有就是引入typedef匪煌。

這個(gè)到后面的定義結(jié)構(gòu)體變量一起說(shuō)吧

關(guān)于結(jié)構(gòu)體類(lèi)型的定義的總結(jié),一般格式就是:

struct 結(jié)構(gòu)體名(也就是可選標(biāo)記名)

{

成員變量;

}党巾;//使用分號(hào)表示定義結(jié)束萎庭;



小編給大家推薦一個(gè)學(xué)習(xí)氛圍超好的地方,C/C++交流企鵝裙:870963251齿拂!適合在校大學(xué)生驳规,小白,想轉(zhuǎn)行署海,想通過(guò)這個(gè)找工作的加入吗购。裙里有大量學(xué)習(xí)資料医男,有大神解答交流問(wèn)題,每晚都有免費(fèi)的直播課程


3.定義結(jié)構(gòu)體變量

3.1之前我們結(jié)構(gòu)體類(lèi)型的定義(結(jié)構(gòu)體的聲明)只是告訴編譯器該如何表示數(shù)據(jù)捻勉,但是它沒(méi)有讓計(jì)算機(jī)為其分配空間镀梭。我們要使用結(jié)構(gòu)體,那么就需要?jiǎng)?chuàng)建變量踱启,也就是結(jié)構(gòu)體變量报账;

創(chuàng)建一個(gè)結(jié)構(gòu)體變量;struct book library埠偿;

看到這條指令透罢,編譯器才會(huì)創(chuàng)建一個(gè)結(jié)構(gòu)體變量library,此時(shí)編譯器才會(huì)按照book模板為該變量分配內(nèi)存空間冠蒋,并且這里存儲(chǔ)空間都是以這個(gè)變量結(jié)合在一起的琐凭,這也是后面訪(fǎng)問(wèn)結(jié)構(gòu)體變量成員的時(shí)候,我們就要用到結(jié)構(gòu)體變量名來(lái)訪(fǎng)問(wèn)浊服。

分析:

struct book的作用统屈;在結(jié)構(gòu)體聲明中,struct book所起到的作用就像int牙躺,愁憔,,孽拷,等基礎(chǔ)數(shù)據(jù)類(lèi)型名作用一樣吨掌。

struct book s1,s2脓恕,*ss膜宋;

定義兩個(gè)struct book結(jié)構(gòu)體類(lèi)型的結(jié)構(gòu)體變量,還定義了一個(gè)指向該結(jié)構(gòu)體的指針炼幔,其ss指針可以指向s1秋茫,s2,或者任何其他的book結(jié)構(gòu)體變量乃秀。

其實(shí):

struct book library肛著;

等效于:

struct book{

char …

….

…..

}librar;

這兩種是等效的跺讯,只是第一種可以減少代碼的編寫(xiě)量枢贿;

3.2現(xiàn)在還是回到剛才提及的那個(gè)問(wèn)題,可選標(biāo)志符什么時(shí)候可以省略

其一:

struct

{

char title[MAXTITL];

char author[MAXAUTL];

float value刀脏;

}library;

//注意:這里不再是定義聲明結(jié)構(gòu)體類(lèi)型局荚,而是直接創(chuàng)建結(jié)構(gòu)體變量了,這個(gè)編譯器會(huì)分配內(nèi)存的;

//這樣的確可以省略標(biāo)識(shí)符也就是結(jié)構(gòu)體名耀态,但是只能使用一次轮傍,因?yàn)檫@是聲明結(jié)構(gòu)體的過(guò)程和定義結(jié)構(gòu)體變量的過(guò)程和在了一起,并且個(gè)成員變量沒(méi)有初始化的茫陆;

//如果你想多次使用一個(gè)結(jié)構(gòu)體模塊,這樣子是行不通的擎析;

其二:

用typedef定義新類(lèi)型名來(lái)代替已有類(lèi)型名簿盅,即給已有類(lèi)型重新命名;

一般格式為揍魂;typedef 已有類(lèi)型 新類(lèi)型名桨醋;

typedef int Elem;

typedef struct{

int date;

.....

.....

}STUDENT;

STUDENT stu1,stu2;

總結(jié)一下關(guān)于結(jié)構(gòu)體變量的定義:

1.先定義結(jié)構(gòu)體類(lèi)型后再定義結(jié)構(gòu)體變量;

格式為现斋;struct 結(jié)構(gòu)體名 變量名列表喜最;

struct book s1,s2庄蹋,*ss瞬内;//注意這種之前要先定義結(jié)構(gòu)體類(lèi)型后再定義變量;

2.在定義結(jié)構(gòu)體類(lèi)型的同時(shí)定義結(jié)構(gòu)體變量限书;

格式為虫蝶;

struct 結(jié)構(gòu)體名

{

成員列表;

}變量名列表倦西;//這里結(jié)構(gòu)體名是可以省的能真,但盡量別省扰柠;

struct book

{

char title[MAXTITL];//一個(gè)字符串表示的titile 題目 粉铐;

char author[MAXAUTL];//一個(gè)字符串表示的author作者 ;

float value;//一個(gè)浮點(diǎn)型表示的value價(jià)格卤档;

}s1蝙泼,s2;

3.直接定義結(jié)構(gòu)體類(lèi)型變量,就是第二種中省略結(jié)構(gòu)體名的情況劝枣;

這種方式不能指明結(jié)構(gòu)體類(lèi)型名而是直接定義結(jié)構(gòu)體變量踱承,并且在值定義一次結(jié)構(gòu)體變量時(shí)適用,無(wú)結(jié)構(gòu)體名的結(jié)構(gòu)體類(lèi)型是無(wú)法重復(fù)使用的哨免,也就是說(shuō)茎活,后面程序不能再定義此類(lèi)型變量了,除非再寫(xiě)一次重復(fù)的struct

4.對(duì)于結(jié)構(gòu)體變量的初始化

4.1先回憶一下關(guān)于基本數(shù)據(jù)類(lèi)型和數(shù)組類(lèi)型的初始化

int a = 0琢唾;

int array[4] = {1,2,3,4};//每個(gè)元素用逗號(hào)隔開(kāi)

回憶一下數(shù)組初始化問(wèn)題载荔;

再回到結(jié)構(gòu)體變量的初始化吧

關(guān)于結(jié)構(gòu)體變量的初始化與初始化數(shù)組類(lèi)似:也是使用花括號(hào)括起來(lái),用逗號(hào)分隔的初始化好項(xiàng)目列表采桃,注意每個(gè)初始化項(xiàng)目必須要和要初始化的結(jié)構(gòu)體成員類(lèi)型想匹配

struct book s1={//對(duì)結(jié)構(gòu)體初始化

"yuwen",//title為字符串

"guojiajiaoyun",//author為字符數(shù)組

22.5 //value為flaot型

};

//要對(duì)應(yīng)起來(lái)懒熙,用逗號(hào)分隔開(kāi)來(lái)丘损,與數(shù)組初始化一樣;

4.2加入一點(diǎn)小知識(shí)工扎,關(guān)于結(jié)構(gòu)體初始化和存儲(chǔ)類(lèi)時(shí)期的問(wèn)題

如果要初始化一個(gè)具有靜態(tài)存儲(chǔ)時(shí)期的結(jié)構(gòu)體徘钥,初始化項(xiàng)目列表中的值必須是常量表達(dá)式,

如果存儲(chǔ)時(shí)期是自動(dòng)的肢娘,那么列表的值就不必是常量了呈础;

關(guān)于這點(diǎn)在講存儲(chǔ)類(lèi)時(shí)期的時(shí)候在分析;

4.3注意:

如果在定義結(jié)構(gòu)體變量的時(shí)候沒(méi)有初始化橱健,那么后面就不能全部一起初始化了而钞;

意思就是:

/////////這樣是可以的,在定義變量的時(shí)候就初始化了拘荡;

struct book s1={//對(duì)結(jié)構(gòu)體初始化

"guojiajiaoyun",//author為字符數(shù)組

"yuwen",//title為字符串

22.5

};

/////////這種就不行了臼节,在定義變量之后,若再要對(duì)變量的成員賦值珊皿,那么只能單個(gè)賦值了网缝;

struct book s1;

s1={

"guojiajiaoyun",//author為字符數(shù)組

"yuwen",//title為字符串

22.5

};//這樣就是不行的,只能在定義的時(shí)候初始化才能全部賦值蟋定,之后就不能再全體賦值了途凫,只能單個(gè)賦值;

只能溢吻;

s1.title = "yuwen";........//單個(gè)賦值维费;

4.4對(duì)于結(jié)構(gòu)體的指定初始化

《這個(gè)只存在于c99,》

5.訪(fǎng)問(wèn)結(jié)構(gòu)體成員

5.1結(jié)構(gòu)體就像一個(gè)超級(jí)數(shù)組促王,在這個(gè)超級(jí)數(shù)組內(nèi)犀盟,一個(gè)元素可以是char類(lèi)型,下個(gè)元素就可以是flaot類(lèi)型蝇狼,再下個(gè)還可以是int數(shù)組型阅畴,這些都是存在的。在數(shù)組里面我們通過(guò)下標(biāo)可以訪(fǎng)問(wèn)一個(gè)數(shù)組的各個(gè)元素迅耘,那么如何訪(fǎng)問(wèn)結(jié)構(gòu)體中的各個(gè)成員呢贱枣?

用結(jié)構(gòu)成員運(yùn)算符點(diǎn)(.)就可以了;

結(jié)構(gòu)體變量名.成員名;

注意:點(diǎn)其結(jié)合性是自左至右的颤专,它在所有的運(yùn)算符中優(yōu)先級(jí)是最高的纽哥;

例如,s1.title指的就是s1的title部分栖秕,s1.author指的就是s1的author部分,s1.value指的就是s1的value部分春塌。然后就可以像字符數(shù)組那樣使用s1.title,象使用float數(shù)據(jù)類(lèi)型一樣使用s1.value;

注意:s1;雖然是個(gè)結(jié)構(gòu)體只壳,但是s1.value卻是float型的俏拱,因此s1.value就相當(dāng)于float類(lèi)型的變量名一樣,按照f(shuō)loat類(lèi)型來(lái)使用吼句;

例如锅必;printf(“%s %s %f”,s1.title,s1.author,s1.value);//訪(fǎng)問(wèn)結(jié)構(gòu)體變量元素

注意:scanf(“%d”,&s1.value); 這語(yǔ)句存在兩個(gè)運(yùn)算符,&和結(jié)構(gòu)成員運(yùn)算符點(diǎn)惕艳,按照道理我們應(yīng)該將(s1搞隐。value括起來(lái),因?yàn)樗麄兪钦w尔艇,表示s1的value部分)但是我們不括起來(lái)也是一樣的尔许,因?yàn)辄c(diǎn)的優(yōu)先級(jí)要高于&么鹤。

5.2如果其成員本身又是一種結(jié)構(gòu)體類(lèi)型终娃,那么可以通過(guò)若干個(gè)成員運(yùn)算符,一級(jí)一級(jí)的找到最低一級(jí)成員再對(duì)其進(jìn)行操作蒸甜;

結(jié)構(gòu)體變量名.成員.子成員………最低一級(jí)子成員;

struct date

{

int year;

int month;

int day;

};

struct student

{

char name[10];

struct date birthday;

}student1;

//若想引用student的出生年月日棠耕,可表示為;student.brithday.year柠新;

brithday是student的成員窍荧;year是brithday的成員;

5.3整體與分開(kāi)

5.3.1可以將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體賦值給另一相同類(lèi)型的結(jié)構(gòu)體變量恨憎,可以到達(dá)整體賦值的效果蕊退;這個(gè)成員變量的值都將全部整體賦值給另外一個(gè)變量;

5.3.2不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行輸入和輸出憔恳;在輸入輸出結(jié)構(gòu)體數(shù)據(jù)時(shí)瓤荔,必須分別指明結(jié)構(gòu)體變量的各成員;

+

總結(jié):除開(kāi)“相同類(lèi)型的結(jié)構(gòu)體變量可以相互整體賦值”外钥组,其他情況下输硝,不能整體引用,只能對(duì)各個(gè)成員分別引用程梦;

6.結(jié)構(gòu)體數(shù)組(這個(gè)在國(guó)二里面车惆眩考的類(lèi)型,只要考結(jié)構(gòu)體就離不開(kāi)結(jié)構(gòu)體數(shù)組和成員的訪(fǎng)問(wèn)屿附,當(dāng)然也只是簡(jiǎn)單的操作)

6.1為什么要引用結(jié)構(gòu)體數(shù)組?

顯然郎逃,在上面的book類(lèi)型的結(jié)構(gòu)體 ,每本書(shū)就需要用一個(gè)book類(lèi)型的結(jié)構(gòu)體變量來(lái)描述挺份,若是要描述兩本書(shū)衣厘,需要使用兩個(gè)這樣的變量,依次類(lèi)推;因此要使用一個(gè)該結(jié)構(gòu)體的數(shù)組影暴,來(lái)表示這些圖書(shū)错邦;并且數(shù)組就是存儲(chǔ)一組具有相同類(lèi)型的數(shù)據(jù),因此就有了結(jié)構(gòu)體數(shù)組的出現(xiàn)型宙,注意本置撬呢,

6.2聲明結(jié)構(gòu)體數(shù)組

與普通的數(shù)組聲明一樣,int a[10];int為元素的數(shù)據(jù)類(lèi)型妆兑,a為數(shù)組名 【10】表示申請(qǐng)了10的int單元的內(nèi)存魂拦;

再看結(jié)構(gòu)體聲明;struct book library[10];是不是類(lèi)似搁嗓,struct book為數(shù)組元素的數(shù)據(jù)類(lèi)型芯勘,library為數(shù)組名,[10]為申請(qǐng)了10個(gè)struct book單元的內(nèi)存腺逛;

解釋?zhuān)宦暶鱨ibrary為一個(gè)具體10個(gè)元素的數(shù)組荷愕,并且每個(gè)元素都book類(lèi)型的結(jié)構(gòu),因此可以得到library[0],library[1]…….都是單獨(dú)獨(dú)立的一個(gè)book結(jié)構(gòu)棍矛;

注意library本身不是結(jié)構(gòu)體名而是一個(gè)數(shù)組名安疗;

6.3結(jié)構(gòu)體數(shù)組的初始化

兩種初始化:就是在定義的時(shí)候賦值的兩種情況;

6.4訪(fǎng)問(wèn)結(jié)構(gòu)體數(shù)組的成員

規(guī)則:在結(jié)構(gòu)體名后加點(diǎn)運(yùn)算符够委,然后再是成員名荐类;

library[5].title;//表示第5個(gè)元素的title成員;library[5]是結(jié)構(gòu)體變量名茁帽,title就是成員名玉罐;

library[5].titlt[4];//注意title是數(shù)組類(lèi)型,第5個(gè)數(shù)組元素的title成員的第4個(gè)字符潘拨;

總結(jié):

library //book結(jié)構(gòu)體的數(shù)組

library[2]//數(shù)組的第二個(gè)元素吊输,一個(gè)book結(jié)構(gòu)體類(lèi)型的變量名;

library[2].title战秋;//char數(shù)組璧亚,結(jié)構(gòu)體數(shù)組的第二個(gè)元素的title成員;

library[2].title[4];//表示一個(gè)字符,結(jié)構(gòu)體數(shù)組的第二個(gè)元素的title成員的第四個(gè)字符桂肌;

7.指向結(jié)構(gòu)體的指針

7.1使用指向結(jié)構(gòu)體的好處;就像指向數(shù)組的指針一樣疯搅,它比數(shù)組本身更容易操作,指向結(jié)構(gòu)體的指針通常也比結(jié)構(gòu)體本身更容易操作埋泵;

聲明和初始化結(jié)構(gòu)體指針幔欧,

聲明struct book * him罪治;

規(guī)則就是,struct 結(jié)構(gòu)體名+ * + 指針名礁蔗;

這個(gè)聲明不是建立一個(gè)新的結(jié)構(gòu)體觉义,而是創(chuàng)建了一個(gè)指針類(lèi)型的him指針變量,他可以指向任何現(xiàn)有的book類(lèi)型的結(jié)構(gòu)體浴井;

him = &library[0]晒骇;

指針him正指向結(jié)構(gòu)體library[0],如何使用him來(lái)取得library[0]的一個(gè)成員呢磺浙?

方法一:

引入一個(gè)運(yùn)算符洪囤,->

后跟->運(yùn)算符的結(jié)構(gòu)體指針和后跟.點(diǎn)運(yùn)算符的結(jié)構(gòu)體名是一樣操作的;

注意一點(diǎn)的是撕氧;不能使用him.成語(yǔ)瘤缩;因?yàn)閔im不是結(jié)構(gòu)體名;

總結(jié):

->只用于結(jié)構(gòu)體指針訪(fǎng)問(wèn)成員伦泥;

.點(diǎn)只用于結(jié)構(gòu)體名訪(fǎng)問(wèn)成員剥啤;

方法二:

如果him=&library[0],那么him=library[0]奄喂;因?yàn)?amp;和是一個(gè)互逆的運(yùn)算符铐殃;

&取地址海洼,*取值跨新;

=》library[0].value 等價(jià)于 (*him).value;注意必須使用圓括號(hào)坏逢,優(yōu)先級(jí)問(wèn)題域帐;

然后都與him.value是一個(gè)作用;

對(duì)于考國(guó)二懂得上面的也就差不多了,足夠了是整;

8.向函數(shù)傳遞結(jié)構(gòu)體信息

8.1傳遞結(jié)構(gòu)體成員

只要結(jié)構(gòu)體成員是具有單值的數(shù)據(jù)類(lèi)型肖揣,(及int等基礎(chǔ)數(shù)據(jù)類(lèi)型)就可以把它作為參數(shù)傳遞給一個(gè)接受這個(gè)特定參數(shù)類(lèi)型的函數(shù);

注意:這個(gè)只能實(shí)現(xiàn)訪(fǎng)問(wèn)浮入,不能修改龙优;

8.2使用結(jié)構(gòu)體地址

注意:如果不修改值,則設(shè)置為const

8.3使用結(jié)構(gòu)體作為參數(shù)傳遞

其中s也是結(jié)構(gòu)體變量事秀,并且為s1結(jié)構(gòu)體變量的副本彤断。

總結(jié):

結(jié)構(gòu)體指針,使用->運(yùn)算符訪(fǎng)問(wèn)成員易迹;

結(jié)構(gòu)體名宰衙;使用.點(diǎn)運(yùn)算符訪(fǎng)問(wèn)成員;

要想通過(guò)調(diào)用函數(shù)修改實(shí)參結(jié)構(gòu)體變量的值睹欲,只能傳遞地址供炼,通過(guò)指針來(lái)修改一屋;直在地址上修改;

8.4結(jié)構(gòu)體之間的雙向通信

先注意這個(gè):c語(yǔ)言中對(duì)于結(jié)構(gòu)體變量是可以整體賦值的袋哼,無(wú)論其成員是怎樣的

傳遞地址冀墨,使用結(jié)構(gòu)體指針接收,用于訪(fǎng)問(wèn)不做修改涛贯;const限制修改轧苫,

結(jié)構(gòu)體作為參數(shù)傳遞,不能成功修改實(shí)參,只能訪(fǎng)問(wèn)疫蔓;

結(jié)構(gòu)體作為參數(shù)含懊,修改結(jié)構(gòu)體并且返回類(lèi)型也為結(jié)構(gòu)體達(dá)到修改的目的;

傳遞地址衅胀,使用結(jié)構(gòu)體指針接收岔乔,用于修改,不使用const限制修改

通常我們是使用結(jié)構(gòu)體指針的滚躯,如果不修改那么我們會(huì)使用const修改雏门;

9.在結(jié)構(gòu)體中使用字符數(shù)組還是字符指針來(lái)存儲(chǔ)字符串

答案先給出:盡量使用字符數(shù)組;

9.1使用字符數(shù)組

#define MAXTITL 100

#define MAXAUTL 100

struct book

{

char title[MAXTITL];//一個(gè)字符串表示的titile 題目 掸掏;

char author[MAXAUTL];//一個(gè)字符串表示的author作者 茁影;

float value;//一個(gè)浮點(diǎn)型表示的value價(jià)格;

};

字符串的存儲(chǔ)在結(jié)構(gòu)體內(nèi)部的丧凤;

結(jié)構(gòu)體總分配200個(gè)字節(jié)的內(nèi)存給這兩個(gè)字符串

9.2使用字符指針

struct book

{

char *title募闲;

char * author;

};

這里的字符串是存儲(chǔ)在編譯器認(rèn)為存儲(chǔ)字符串常量的任何地方愿待,這個(gè)結(jié)構(gòu)體中存放的只有兩個(gè)地址而已浩螺,值分配8分字節(jié);結(jié)構(gòu)體不為字符串分配任何內(nèi)存存儲(chǔ)空間仍侥,因此這時(shí)候在輸入的時(shí)候存在了一個(gè)潛在的危險(xiǎn)要出;

scanf("%s",s.last);//把字符串放到由s.last指向的內(nèi)存中因?yàn)檫@是一個(gè)未初始化的變量,因此該地址是可以指向任意大小的农渊,因此此時(shí)就是一個(gè)潛在的危險(xiǎn)患蹂;

總結(jié):因我們最好是使用字符數(shù)組來(lái)存儲(chǔ)字符串;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末砸紊,一起剝皮案震驚了整個(gè)濱河市传于,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌批糟,老刑警劉巖格了,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異徽鼎,居然都是意外死亡盛末,警方通過(guò)查閱死者的電腦和手機(jī)弹惦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悄但,“玉大人棠隐,你說(shuō)我怎么就攤上這事¢芟” “怎么了助泽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嚎京。 經(jīng)常有香客問(wèn)我嗡贺,道長(zhǎng),這世上最難降的妖魔是什么鞍帝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任诫睬,我火速辦了婚禮,結(jié)果婚禮上帕涌,老公的妹妹穿的比我還像新娘摄凡。我一直安慰自己,他們只是感情好蚓曼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布亲澡。 她就那樣靜靜地躺著,像睡著了一般纫版。 火紅的嫁衣襯著肌膚如雪床绪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天捎琐,我揣著相機(jī)與錄音会涎,去河邊找鬼裹匙。 笑死瑞凑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的概页。 我是一名探鬼主播籽御,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼惰匙!你這毒婦竟也來(lái)了技掏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤项鬼,失蹤者是張志新(化名)和其女友劉穎哑梳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绘盟,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸠真,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年悯仙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吠卷。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锡垄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祭隔,到底是詐尸還是另有隱情货岭,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布疾渴,位于F島的核電站千贯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏搞坝。R本人自食惡果不足惜丈牢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞄沙。 院中可真熱鬧己沛,春花似錦、人聲如沸距境。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)垫桂。三九已至师幕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诬滩,已是汗流浹背霹粥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疼鸟,地道東北人后控。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像空镜,于是被迫代替她去往敵國(guó)和親浩淘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔吴攒,今天18年5月份再次想寫(xiě)文章张抄,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 2,756評(píng)論 2 9
  • 版權(quán)聲明:本文為 gfson 原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處洼怔。注:作者水平有限署惯,文中如有不恰當(dāng)之處,請(qǐng)予以指正镣隶,萬(wàn)分感謝...
    gfson閱讀 2,985評(píng)論 0 6
  • 結(jié)構(gòu)體概述1.1 概念:有時(shí)需要將不同類(lèi)型的數(shù)據(jù)組合成一個(gè)有機(jī)的整體,以便于引用极谊。因此C語(yǔ)言采用結(jié)構(gòu)體形式將不同類(lèi)...
    Eric_Hunter閱讀 1,179評(píng)論 0 0
  • 感覺(jué)回復(fù)的都是滿(mǎn)滿(mǎn)的情話(huà) 情話(huà)都是摻了假話(huà)的謊話(huà) 你以為你感覺(jué)的就是你感覺(jué)的嗎 不是你的感覺(jué)會(huì)作假 只是你說(shuō)的慌話(huà)太高雅
    莫非于閱讀 202評(píng)論 0 0
  • 今天柯姐突然叫我去見(jiàn)一個(gè)男生什荣,不過(guò)36歲,比我大15歲怀酷,并不是我的style 而且我也并不想談戀愛(ài)稻爬,暫時(shí)只想賺錢(qián)
    Defsoul娟閱讀 108評(píng)論 0 0