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

正文內(nèi)容

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

2025-08-25 08:52 上一頁面

下一頁面
  

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