freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c++數(shù)據(jù)類型-全文預(yù)覽

  

【正文】 的事情是,我們不能使用枚舉成員進(jìn)行迭代,如:// 不支持for ( open_modes iter = input。我們不能做到的是打印枚舉成員的實(shí)際枚舉名。// 錯(cuò)誤1 不是open_modes 的枚舉成員 ...open_file( Jonah, 1 )。它們代表了能用來(lái)初始化和賦值open_modes類型變量的值的全集。例如:enum open_modes{ input = 1, output, append }。// ...open_file( Phoenix_and_the_Crane, append )。因此,我們可能會(huì)這樣寫:const int input = 1。if ( found = find( rosebud ))// ok: found == true// 如找到返回該項(xiàng)的指針extern int* find( int value )。0或空指針被轉(zhuǎn)換成false,所有其他的值都被轉(zhuǎn)換成true。int occurrence_count = 0。雖然布爾類型的對(duì)象也被看作是一種整數(shù)類型的對(duì)象,但是它不能被聲明為signed、unsigned、short或long。string next_word。next_value = ival。, const Matrixamp。實(shí)際的C++程序很少使用指向獨(dú)立對(duì)象的引用類型。ri2 = ival2。重要的是,現(xiàn)在pi和pi2都指向同一對(duì)象。ival2。引用之間的賦值是第二個(gè)不同。ri = 0。讓我們來(lái)看幾個(gè)例子。pi_ref = amp。我們的引用不是指向一個(gè)常量,而是指向一個(gè)非常量指針,指針指向一個(gè)const對(duì)象。const int *amp。pi_ref = amp。我們希望用一個(gè)const對(duì)象的地址來(lái)初始化一個(gè)引用。對(duì)用戶來(lái)說(shuō),就好像修改動(dòng)作沒(méi)有生效(這對(duì)于用戶來(lái)說(shuō),這并不總是好事情)。編譯器將其轉(zhuǎn)換成:int temp = dval。對(duì)于不可尋址的值,如文字常量,以及不同類型的對(duì)象,編譯器為了實(shí)現(xiàn)引用,必須生成一個(gè)臨時(shí)對(duì)象,引用實(shí)際上指向該對(duì)象,但用戶不能訪問(wèn)它。dr = dval + 。ir = 1024。const引用可以用不同類型的對(duì)象初始化(只要能從一種類型轉(zhuǎn)換到另一種類型即可),也可以是不可尋址的值,如文字常量。ri = ival3。//定義一個(gè)引用和一個(gè)對(duì)象int amp。refVal。例如:refVal += 2 。例如,下列的賦值不會(huì)使refVal指向min_val, 而是會(huì)使refVal指向的對(duì)象ival的值被設(shè)置為min_val的值。// OK: ptrVal2是一個(gè)指向指針的引用。refVal = amp。refVal2。// OK: refVal是一個(gè)指向ival的引用int amp。但是不需要指針的語(yǔ)法。在這種情況下,pi_ptr指向的對(duì)象的值以及它的地址本身都不能被改變。 //NG指向const對(duì)象的const指針的定義就是將前面兩種定義結(jié)合起來(lái)。if (*curErr) {errorHandler()。curErr是指向一個(gè)非const對(duì)象的const指針。我們可以定義一個(gè)const指針指向一個(gè)const或一個(gè)非const對(duì)象。雖然dval 不是常量,但試圖通過(guò)pc修改它的值,仍會(huì)導(dǎo)致編譯錯(cuò)誤(因?yàn)樵谶\(yùn)行程序的任意一點(diǎn)上,編譯器不能確定指針?biāo)傅膶?shí)際對(duì)象)。 // ok*pc = 。double dval = 。例如:const double *pc = 0。例如:const double *cptr。[這種內(nèi)部工作需要進(jìn)行數(shù)據(jù)流分析(data flow analysis), 通常由單獨(dú)的優(yōu)化器(optimizer)組件來(lái)完成。minWage。const double pi。在程序中任何改變這個(gè)值的企業(yè)都將導(dǎo)致編譯錯(cuò)誤。)const類型限定修飾符提供了一個(gè)解決方案。在程序中bufSize有可能被偶然修改。int bufSize = 512。我們只需改變bufSize被初始化的那一行。第二個(gè)問(wèn)題是可維護(hù)性。const限定修飾符下面的循環(huán)有兩個(gè)問(wèn)題,都是由于使用512作為循環(huán)上限引起的:for (int index = 0。begin()和end()操作返回指向string開(kāi)始和結(jié)束處的迭代器(iterator)。for (int ix=0。正確的初始化如下:const char *str = ()。名字c_str()代表了string類型與C風(fēng)格字符串兩種表示法之間的關(guān)系。對(duì)隱式地將string對(duì)象轉(zhuǎn)換成C風(fēng)格的字符串,string類型沒(méi)有提供支持。這種方法能夠生效是由于string類型能夠自動(dòng)將C風(fēng)格的字符串轉(zhuǎn)換成string對(duì)象。string s1(“hello”)。如果希望直接將s2附加到s1后面,那么可使用“+=”操作符:s1 += s2。 我們可以使用加操作符“+”或看起來(lái)有點(diǎn)怪異的復(fù)合賦值操作符“+=”,將兩個(gè)或多個(gè)字符串連接起來(lái)。怎樣驗(yàn)證呢?等于操作符比較兩個(gè)string對(duì)象,如果相等則返回true:if (st == st3 ) //初始化成功怎樣拷貝一個(gè)字符串呢?最簡(jiǎn)單的辦法是使用賦值操作符。 //空字符串我們?cè)鯓幽鼙WC它是空的?當(dāng)然,一種辦法是測(cè)試size()是否為0。要使用string類型,必須先包含相關(guān)的頭文件;include stringstring st( “The expense of spirit\m”)。對(duì)于C風(fēng)格字符串,通過(guò)下面兩步條件測(cè)試完成。把兩個(gè)字符串連接起來(lái)形成第三個(gè)字符串的實(shí)現(xiàn)是,用strcpy()把一個(gè)字符串拷貝到一個(gè)新實(shí)例中,然后用strcat()把另一個(gè)字符串連接到新的實(shí)例上。4. 支持兩個(gè)字符串的相等比較。 2. 支持字符串之間的拷貝。為了將程序員從許多“與使用C風(fēng)格字符串相關(guān)的錯(cuò)誤”中解脫出來(lái),每個(gè)項(xiàng)目、部門或公司都提供了自己的字符串實(shí)現(xiàn),那么程序的可移植性和兼容性就變得非常困難。較好的解決方案是修正原始設(shè)計(jì)中的漏洞。被加進(jìn)來(lái),以便改正由直接遞增st引起的錯(cuò)誤。下列代碼是正確的。但是,輸出仍然是不正確的。(程序的輸出結(jié)果取決于st所指向的內(nèi)存單元的內(nèi)容。 ” st。你能發(fā)現(xiàn)我們這次犯的錯(cuò)誤嗎?include iostreamconst char *st = “The expense of spirit\n”。程序?qū)⒂肋h(yuǎn)執(zhí)行下去或者由系統(tǒng)終止它。 ” st。你能看到問(wèn)題所在嗎?include iostreamconst char *st = “The expense of spirit\n”。由于C風(fēng)格字符串的底層(lowlevel)特性,C或C++的初學(xué)者很容易在這上面出錯(cuò)。}C風(fēng)格字符串的長(zhǎng)度可以為0(因而被視為空串),有兩種方式:字符指針被置為0,因而它不指向任何對(duì)象。否則,程序很可能會(huì)失敗。例如:while (*st++) {…}char*類型的指針被解除引用,并且測(cè)試指向的字符是true還是false。即使當(dāng)我們寫一個(gè)字符串常量時(shí),如:const char *st = “The expense of spirit\n”。//把第二個(gè)字符串拷貝到第一個(gè)字符串中char* strcpy(char*, const char*)。(實(shí)際上,在標(biāo)準(zhǔn)C++之前,除了第三方字符串庫(kù)類之外,它是唯一一種被支持的字符串)字符串被存儲(chǔ)在一個(gè)字符數(shù)組中,一般通過(guò)一個(gè)char*類型的指針來(lái)操縱它。 // 現(xiàn)在iter指向下一個(gè)元素。例如:int ia[10]int *iter = amp。例如,假設(shè)一個(gè)char是一個(gè)字節(jié),一個(gè)int是4個(gè)字節(jié),double是8個(gè)字節(jié),那么指針加2是給其持有的地址值增加還是16,完全取決于指針的類型是char, int還是double.實(shí)際上,只有指針指向數(shù)組元素時(shí),我們才能保證較好地運(yùn)用指針的算術(shù)運(yùn)算。指針可以讓它的地址值增加或減少一個(gè)整數(shù)值。int *pi = amp。為了實(shí)際地訪問(wèn)到ival,我們需要兩次解引用ppi.cout “The value of ival \n” “direct value: “ ival “\n” “indirect value: “ *pi “\n” ”doubly indirect value: ” **ppi endl。pi。我們知道,當(dāng)取一個(gè)int型對(duì)象的地址時(shí),int *pi = amp。*pi = abs(*pi)。下面給出了怎樣解引用pi以便間接訪問(wèn)ival。C++提供了解引用操作符(*)(dereference operator)來(lái)間接地讀和寫指針?biāo)赶虻膶?duì)象。pi。// 類型: int*pi。pv = pd。當(dāng)然,如果我們要做的僅僅是持有地址值(可能是把一個(gè)地址同另一個(gè)地址作比較),那么指針的實(shí)際類型就不重要了。pi = amp。double *pd = amp。指針不能持有非地址值。ival。已知ival的定義:int ival = 1024。我們通過(guò)在標(biāo)識(shí)符前加一個(gè)解引用操作符(*)來(lái)定義指針。不同之處在于指針?biāo)傅膶?duì)象的類型上。指針類型指針持有另一個(gè)對(duì)象的地址,使我們能夠間接地操作這個(gè)對(duì)象。逗號(hào)分隔的標(biāo)識(shí)符列表同樣也能為每個(gè)對(duì)象提供顯式的初始值。一個(gè)被聲明了初始值的對(duì)象也被稱為已經(jīng)初始化的(initialized)。//通過(guò)string的缺省構(gòu)造函數(shù)進(jìn)行初始化。然而,在你能夠識(shí)別這些情況之前,為每個(gè)對(duì)象提供初始值是個(gè)安全的作法。未初始化的對(duì)象不是沒(méi)有值,而是它的值是未定義的(undefined)。一個(gè)簡(jiǎn)單的定義指定了變量的類型和標(biāo)識(shí)符,它并不提供初始值。 對(duì)于多個(gè)詞構(gòu)成的標(biāo)識(shí)符,習(xí)慣上,一般在每個(gè)詞之間加一個(gè)下劃線,或內(nèi)嵌的每個(gè)詞第一個(gè)字母大寫。對(duì)于命名對(duì)象有許多已普遍接受的習(xí)慣,主要考慮因素是程序的可讀性。它必須以字母或下劃線開(kāi)頭,并且區(qū)分大寫字母和小寫字母。雖然一個(gè)程序只能包含一個(gè)對(duì)象的一個(gè)定義,但它可以包含任意數(shù)目的對(duì)象聲明。對(duì)象聲明(declaration)的作用是使程序知道該對(duì)象的類型和名字。如果在一個(gè)文件中定義的對(duì)象需要在另一個(gè)文件中被訪問(wèn),就可能會(huì)出現(xiàn)問(wèn)題。因?yàn)橐粋€(gè)對(duì)象只能有一個(gè)位置,所以程序中的每個(gè)對(duì)象只能被定義一次。引用一個(gè)未知的對(duì)象將引起編譯錯(cuò)誤。實(shí)際上,它只是說(shuō)明了在程序之外的某處有這個(gè)變更的定義。變量名變量名:即變量的標(biāo)識(shí)符(identifier),可以由字母、數(shù)字及下劃線字符組成。關(guān)鍵字標(biāo)識(shí)符不能再作為程序的標(biāo)識(shí)符使用。 標(biāo)識(shí)符一般使用助記的名字 即:能夠?qū)Τ绦蛑械挠梅ㄌ峁┨崾镜拿?。這個(gè)列表可跨越多行,最后以分別結(jié)束。這些對(duì)象被稱為未初始化的(uninitialized)。(在有些情況下,這不是必須的。int ival。初始的第一個(gè)值可以在對(duì)象的定義中指定。在隱式形式中,初始值被放在括號(hào)中。對(duì)象可以用任意復(fù)雜的表達(dá)式來(lái)初始化,包括函數(shù)的返回值。不同數(shù)據(jù)類型的指針之間的區(qū)別不是在指針的表示上,也不在指針?biāo)钟械闹担ǖ刂罚┥?,?duì)所有類型的指針這兩方面都是相同的。 如果一個(gè)double型的指針尋址到1000內(nèi)存處,那么在32位機(jī)器上,跨越的地址空間是1000~1007??赡馨l(fā)生的情況是,當(dāng)程序員后來(lái)想定義第二個(gè)字符串指針時(shí),他會(huì)錯(cuò)誤地修改定義如下://喔:ps2不是一個(gè)字符串指針string* ps, ps2當(dāng)指針持有0值時(shí),表明它沒(méi)有指向任何對(duì)象,或持有一個(gè)同類型的數(shù)據(jù)對(duì)象的地址。// pi2被初始化為ival地址int *pi2 = amp。Pi2 = 0。例如,已知如下定義:double dval。 double*pi = pd。但是不允許,因?yàn)?,雖然pi和pd能夠持有同樣的地址值,但對(duì)那塊內(nèi)存的存儲(chǔ)布局和內(nèi)容的解釋卻完全不同。void *pv = pi。已知一個(gè)int型指針對(duì)象pi, 當(dāng)我們寫下pi時(shí):// 計(jì)算包含在pi內(nèi)部的地址值。pi時(shí):// 計(jì)算pi的實(shí)際地址// 類型: int**amp。為了訪問(wèn)指針?biāo)赶虻膶?duì)象,我們必須解除指針的引用。ival。// 對(duì)于右邊的實(shí)例,讀取pi所指對(duì)象的值// 對(duì)于左邊的實(shí)例,則把右邊的表達(dá)式賦給對(duì)象。 // ival = ival + 1。當(dāng)我們?nèi)≈赶騣nt型的指針的地址時(shí):int **ppi = amp。我們獲得指針ppi持有的地址值 – 在本例中,即pi持有的值,而pi又是ival的地址。int I,j,k。// 加到pi 包含的地址上pi = pi + 2。指針加2意味著指針持有的地址值增加了該類型兩個(gè)對(duì)象的長(zhǎng)度。指針?biāo)阈g(shù)運(yùn)算的典型用法是遍歷一個(gè)數(shù)組。++iter。C風(fēng)格字符串C風(fēng)格字符串起源于C語(yǔ)言,并在C++中繼續(xù)得到支持。//比較兩個(gè)字符串是否相等int strcmp( const char*, const char* )。我們必須包含相關(guān)的C頭文件,include cstring指向C風(fēng)格字符串的字符指針總是指向一個(gè)相關(guān)聯(lián)的字符數(shù)組。那么,我們?cè)鯓右宰址男问絹?lái)操作st呢?一般地,我們用指針的算術(shù)運(yùn)算來(lái)遍歷C風(fēng)格的字符串,每次指針增加1,直到到達(dá)終止空字符為止。一般來(lái)說(shuō),當(dāng)我們使用一個(gè)指針時(shí),在解除指針的引用之前,測(cè)試它是否指向某個(gè)對(duì)象是必要的。return t。// pc2指向空字符const char *pc2 = “”。不幸的是,第一個(gè)嘗試就是錯(cuò)誤的。cout len “。這個(gè)條件將一直為真,因?yàn)檠h(huán)的每次迭代都給st中的地址加1。不幸的是:輸出的結(jié)果是錯(cuò)誤的。cout len “。st已經(jīng)前進(jìn)到終止空字符之后的字符上去了。編譯并執(zhí)行程序。st必須被重新定位到字符串長(zhǎng)度加1的位置。語(yǔ)句:st = st –len 1。我們通過(guò)補(bǔ)償原始設(shè)計(jì)中的邏輯錯(cuò)誤來(lái)補(bǔ)救我
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1