- N +

結(jié)構(gòu)體初始化賦值(結(jié)構(gòu)體默認(rèn)值賦值)

各位老鐵們好,相信很多人對結(jié)構(gòu)體初始化賦值都不是特別的了解,因此呢,今天就來為大家分享下關(guān)于結(jié)構(gòu)體初始化賦值以及結(jié)構(gòu)體默認(rèn)值賦值的問題知識,還望可以幫助大家,解決大家的一些困惑,下面一起來看看吧!

結(jié)構(gòu)體中有string類型,如何初始化

因為stringstr;的size大小未知,不能這樣初始化

只有struct的size已知的情況下才能這樣初始化或者賦值

string的定義typedefbasic_string<char>string;

aa.str="abc";

sta結(jié)構(gòu)體如何賦值

結(jié)構(gòu)體變量是可以直接賦值的;定義結(jié)構(gòu)體類型,然后用這個類型定義出來的變量就是結(jié)構(gòu)體變量;C語言在相同類型的變量間賦值時是直接內(nèi)存復(fù)制的,即將他們的內(nèi)存進(jìn)行復(fù)制,這里因為同樣結(jié)構(gòu)體變量,屬于同一種變量,所以賦值時是按照他們的內(nèi)存分布來直接拷貝的。

結(jié)構(gòu)體可以整體賦值么

可以的,但需要保證是具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量。可以將一個結(jié)構(gòu)體變量的值賦給另一個具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量。如student1和student2都是student類型的變量,可以這樣賦值:student1=student2;假設(shè)申明了兩個成員列表完全一樣的兩個結(jié)構(gòu)體,編譯器會當(dāng)作兩個完全不同的類型,即使他們的成員列表是一樣的,令兩個結(jié)構(gòu)體的變量間賦值,則是非法的。

c語言為什么結(jié)構(gòu)體聲明的時候可以直接賦值

聲明的時候和后續(xù)賦值略有不同,在C語言中是兩種處理方法。如有結(jié)構(gòu)體structtest{inta;charc;intb;};定義的時候,可以structtestvar={1,'c',2};這樣初始化,結(jié)果為var.a=1,var.c='c',var.b=2;但是如果后續(xù)賦值var={1,'c',2};就會報錯。因為在C語言中不支持這種形式的操作。不過可以取巧轉(zhuǎn)換一下,改成var=(structtest){1,'c',2};這樣就可以了。在這種情況下,系統(tǒng)會申請一個臨時變量,并初始化為該值,再對var進(jìn)行賦值。而同類型結(jié)構(gòu)體之間賦值操作是C語言規(guī)則允許的。

如何給結(jié)構(gòu)體數(shù)組賦初值

舉例如下:

chara[10]

;1、定義的時候直接用字符串賦值chara[10]="hello";注意:不能先定義再給它賦值,如chara[10];a[10]="hello";這樣是錯誤的!2、對數(shù)組中字符逐個賦值chara[10]={'h','e','l','l','o'}

;3、利用strcpychara[10];strcpy(a,"hello");易錯情況:

1、chara[10];a[10]="hello";//一個字符怎么能容納一個字符串?況且a[10]也是不存在的!

2、chara[10];a="hello";//這種情況容易出現(xiàn),a雖然是指針,但是它已經(jīng)指向在堆棧中分配的10個字符空間,現(xiàn)在這個情況a又指向數(shù)據(jù)區(qū)中的hello常量,這里的指針a出現(xiàn)混亂,不允許!還有:不能使用關(guān)系運(yùn)算符“==”來比較兩個字符串,只能用strcmp()函數(shù)來處理。C語言的運(yùn)算符根本無法操作字符串。在C語言中把字符串當(dāng)作數(shù)組來處理,因此,對字符串的限制方式和對數(shù)組的一樣,特別是,它們都不能用C語言的運(yùn)算符進(jìn)行復(fù)制和比較操作。

直接嘗試對字符串進(jìn)行復(fù)制或比較操作會失敗。

例如,假定str1和str2有如下聲明:

charstr1[10],str2[10];利用=運(yùn)算符來把字符串復(fù)制到字符數(shù)組中是不可能的:

str1="abc";/***WRONG***/str2=str1;/***WRONG***/C語言把這些語句解釋為一個指針與另一個指針之間的(非法的)賦值運(yùn)算。但是,使用=初始化字符數(shù)組是合法的:

charstr1[10]="abc";這是因為在聲明中,=不是賦值運(yùn)算符。

試圖使用關(guān)系運(yùn)算符或判等運(yùn)算符來比較字符串是合法的,但不會產(chǎn)生預(yù)期的結(jié)果:

if(str1==str2).../***WRONG***/這條語句把str1和str2作為指針來進(jìn)行比較,而不是比較兩個數(shù)組的內(nèi)容。

因為str1和str2有不同的地址,所以表達(dá)式str1==str2的值一定為0。

怎么樣將一個結(jié)構(gòu)體的值賦值給另一個結(jié)構(gòu)體(兩個結(jié)構(gòu)體的大小一樣,也就是理解為數(shù)據(jù)備份的意思~~~)

如果這個結(jié)構(gòu)體沒有指針成員的話,可以直接用“=”號賦值(目前主流的編譯器都支持這樣的賦值,如果是特別老舊的編譯器可能不支持這樣,那就要把每個成員分別賦值了)如果有指針成員,那么這個指針成員不能簡單的賦值,而要復(fù)制該成員指向的空間數(shù)據(jù)

END,本文到此結(jié)束,如果可以幫助到大家,還望關(guān)注本站哦!

返回列表
上一篇:
下一篇: