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

正文內(nèi)容

c程序設(shè)計(jì)教程:第4章-構(gòu)造類型初探-展示頁

2024-10-10 16:55本頁面
  

【正文】 針類型的表達(dá)式 , 則 “ *p”就是一個(gè)左值表達(dá)式 , 它代表由p指向的對象 , 并且通過 “ *p=”改變這個(gè)對象的值 。 而右值 “ 56”只能作為右操作數(shù) , 不能作為左操作數(shù) 。 名字 “ 左值 ” 來源于賦值表達(dá)式 “ E1=E2”, 其中左運(yùn)算分量 “ E1”必須能被計(jì)算和修改 。 ? 用這個(gè)原則正確地設(shè)計(jì)軟件可以大大減少調(diào)試時(shí)間和不良的副作用 , 使程序易于修改和調(diào)試 。 對指針使用 const限定符 ? 可以限制 【 例 】 中 “ *p”和 “ p”的改變 , 以提高程序的可靠性 。 *p1=*p2表示 p1的目標(biāo)值變?yōu)?p2的目標(biāo)值 , 但指針 p1并沒有放棄自己指向的地址 , 所以 p1≠p2。 *p1=*p2。 n)操作。因此要正確區(qū)別 (p177。最后一句使用語句 “ *p=*(p+2)。 n)。 ② 對 p進(jìn)行運(yùn)算,相應(yīng)的 *p為 p指向地址的內(nèi)容。 如果這個(gè)內(nèi)容很重要 , 又不慎將它修改 ,就會造成災(zāi)難性后果 。需要注意如下問題: ① 對 p進(jìn)行 ++p和 p操作時(shí) , 因?yàn)楸境绦虻?x和 y順次存放 ,所以可以使 p的內(nèi)容指向 x或 y, *p也隨之變化并為 x或 y的值 。這是因?yàn)椴煌愋偷臄?shù)據(jù)實(shí)際存儲所占的單元數(shù)不同,例如 char為 1字節(jié), int為 2字節(jié) (VC為 4字節(jié) ), long和 float為 4字節(jié), double為 8字節(jié)等,這些數(shù)分別為它們的 “ 比例因子 ” ,具體采用哪個(gè)作為比例因子,取決于 p指向的數(shù)據(jù)是什么類型。若 p為指針, n為整數(shù),則可以p+n或 pn。 56,0012FF70,0012FF74,85 //*(p+2) 56,0012FF70,0012FF74,858993460 //*p 56,0012FF70,0012FF74,85 //*p=*(p+2)。 56,0012FF78,0012FF74,85 //p。 85,0012FF78,0012FF74,85 //*p=85。 65,0012FF78,0012FF74,65 //p=amp。 程序輸出結(jié)果如下: 56,0012FF7C,0012FF74,56 //p=amp。p,*pendl。 *p=*(p+2)。 coutx,p,amp。 coutx,p,amp。 //對指針進(jìn)行減 2運(yùn)算 coutx,p,amp。p,*pendl。 p。 //對指針進(jìn)行增一運(yùn)算 coutx,p,amp。p,*pendl。 *p=85。 //指針改為指向 y couty,p,amp。 p=amp。 //指針指向 x coutx,p,amp。 p=amp。 include iostream using namespace std。p。 正如使用 x不要再考慮amp。 ? 【 例 】 演示了這種情況 。y?,F(xiàn)在假設(shè)它們具有如圖 的形式: ? 由關(guān)聯(lián)關(guān)系可知 , *p和 x同步變化 , 即改變?nèi)魏我粋€(gè)的值 , 它們的值保持一致 。pendl。 cout通過名字使用 x,通過 p內(nèi)的地址 p使用 *pendl。 coutx的值等于 x,x的首地址是 amp。 int* p=amp。 include iostream using namespace std。 ? 由此可知 , p的值是地址 , 雖然這個(gè)地址就是對象 x在內(nèi)存中的存儲首地址 , 但我們并不直接說p的值是 x的地址 , 而說成 p指向 x的存儲首地址 ,簡稱 p指向 x的地址 。 沒有賦值的指針里含有隨機(jī)地址 , 破壞性很大 。 因?yàn)橹羔槍ο蟠娣诺氖堑刂?, 所以必須有具體指向 。x”。x”。 ? 實(shí)際上 , 選擇 “ int* p。 ? 這里是借助 “ *” 號 , 而且與 “ *” 號的位置沒有關(guān)系 ,下面 3種寫法都是正確的: int * p; //“*”在中間 , 與誰都不連 int *p; //“*”與 p連寫為 *p int* p; //“*”與 int連寫為 int* ? 讀者有時(shí)會對使用如下方法在聲明指針的同時(shí)初始化指針的方式感到困惑 , 即: int *p=amp。 // 地址運(yùn)算 *p=x。 //聲明稱為構(gòu)造類型的指針類型對象 p=amp。 ? 如果使用 “ *” 來標(biāo)記這種數(shù)據(jù)類型 , 就可將 p與整型變量區(qū)分開來 , 也就解決了問題 。 ? “ p”這種形式已經(jīng)被基本類型的對象使用 , 如果使用 “ int p。對象p和 x之間的關(guān)系如圖 。x。p= 0012FF78。 ? 既然 p是一個(gè)標(biāo)識符,也就是新數(shù)據(jù)類型的一個(gè)對象,系統(tǒng)也要給 p分配一個(gè)存儲空間。 ? 它實(shí)現(xiàn)了同樣的輸出結(jié)果并驗(yàn)證了 p和 x之間的關(guān)系為: p=amp。 ? 運(yùn)算符 “ *” 使 p間接引用了 x的值 , 稱為 “ 間接引用 ” 運(yùn)算符或 “ 遞引用 ” 運(yùn)算符 。 這時(shí) p代表 x的地址 , *p代表 amp。x, 即 p=amp。xendl。 cout 通過名字 x 使用 x, 通過首地址amp。 coutx的值等于 x,存儲 x的首地址是amp。 include iostream using namespace std。x”表示通過這個(gè)地址訪問對象x。 如圖 , 假設(shè)使用一個(gè)運(yùn)算符 “ *” 來間接引用地址 ( amp。x=0012FF7C)。x”取得存放 x的首地址 (amp。 構(gòu)造指針類型 ? 假設(shè)一個(gè)整型對象 x的值為 56, 系統(tǒng)將為它在內(nèi)存中分配一塊連續(xù)的存儲單元 。 指 針 ? 假設(shè)將一個(gè)整型對象 x存放在以 0012FF7C開始的內(nèi)存單元中,如果要訪問對象 x,既可通過對象的名字 x,也可通過該對象的首地址0012FF7C。 ? 本節(jié)將探討幾個(gè)典型的構(gòu)造類型,并簡單說明它們的使用方法。 這些分量可以與基本類型對象一樣被賦值并在表達(dá)式中使用 。第 4章 構(gòu)造類型初探 ? 雖然 C++提供了基本數(shù)據(jù)類型,但它們的能力有限,還需要利用基本類型構(gòu)造一些復(fù)雜的數(shù)據(jù)類型,這些以基本類型為基礎(chǔ)構(gòu)造出來的類型統(tǒng)稱為構(gòu)造類型。 第 4章 構(gòu)造類型初探 ? 其實(shí) , 構(gòu)造類型的每一個(gè)分量都是一個(gè)對象 , 它可以是基本類型或者構(gòu)造類型 。 合理地使用它們 , 不僅能準(zhǔn)確 、 清晰地描述復(fù)雜的數(shù)據(jù)結(jié)構(gòu) , 而且還使得程序顯得清晰 、 簡潔 。隨著應(yīng)用的深入,還會構(gòu)造出新的類型,這些構(gòu)造類型相互之間又有一定聯(lián)系,從而為程序設(shè)計(jì)提供新的舞臺。這通過構(gòu)造指針類型來實(shí)現(xiàn)。 如果這塊存儲區(qū)的首地址 ( 即起始地址 ) 為 0012FF7C, 則可以通過 “ amp。稱為取地址運(yùn)算符 , 即 amp。 如果要訪問對象 x,既可以通過對象的名字 x, 也可以通過存放對象的首地址 0012FF7C。x) 中存放對象的值 , 即 “ *amp。 下面的程序演示了這種方法 , 實(shí)現(xiàn)了所做假設(shè) 。 void main( ){ int x=56。xendl。x使用 *amp。 } ? 程序輸出結(jié)果如下: x的值等于 56,存儲 x的首地址是 0012FF7C 通過名字 x使用 56,通過首地址 0012FF7C使用 56 ? 現(xiàn)在想使用一個(gè)符號 p代表 amp。x。x內(nèi)的值 x, 即 *p=x。 這樣就可以將上面的第 2條輸出語句改寫成如下形式: cout 通過名字 x 使用 x, 通過首地址p使用 *pendl。x和 *p=x。假設(shè)用內(nèi)存單元 0012FF78作為存放對象 p的首地址,顯然 amp。 ? 在這個(gè)地址 0012FF78里不是存放 p的值,而是存放變量 x的首地址 0012FF7C,即 p=amp。這樣就可以根據(jù) p找到 x,也就能對 x進(jìn)行存取。 ? 現(xiàn)在的問題是 , 如何表示這種新的數(shù)據(jù)類型 ? ? 它是針對整型對象的 , 所以可以借助整型類型 int來聲明 。”的形式 , 則將 p作為整型對象 , 顯然是行不通的 。 即 int * p。x。 //值引用 ? 因?yàn)檫@種數(shù)據(jù)類型聲明的對象代表指向另一個(gè)數(shù)據(jù)類型對象的存儲首地址 , 所以得名為 “ 指針 ” 類型 。x?!?, 認(rèn)為 “ int*”是一種指向整型的指針類型 , 用它聲明指針對象 p, p應(yīng)該賦予 x的地址 ,所以應(yīng)是 “ p=amp。 聲明指向整型的指針對象 p并同時(shí)初始化 , 也就順理成章為 “ int* p=amp。 ? 顯然 , 稱 p為指針對象 ( 存放的是對象的首地址 ) , 而不是稱 *p為指針對象 ( *p代表指針指向的地址單元所存放的值 ) 。 ? 最常見的錯(cuò)誤是聲明了指針 , 沒有為指針賦值 。 聲明并同時(shí)初始化指針的方法避免了遺漏賦值 。 【 例 】 演示使用指針及指針地址。 void main( ) { int x=56。x。x,p指向的地址是 pendl。 coutp 指向的地址為 p, 存放 p 的 地 址 是amp。 } ? 程序輸出如下: x的值等于 56,x的首地址是 0012FF7C,p指向的地址是 0012FF7C 通過名字使用 56,通過 p內(nèi)的地址 0012FF7C使用 56 p指向的地址為 0012FF7C,存放 p的地址是 0012FF78 指針類型及指針運(yùn)算 ? 假設(shè)已經(jīng)知道對象地址 ( NULL 也算已知 ) , 現(xiàn)在將上面的構(gòu)造語法總結(jié)如下: 存儲類型 數(shù)據(jù)類型 * 指針名; 指針名 =對象地址; 或者采取直接初始化的方法: 存儲類型 數(shù)據(jù)類型 * 指針名 =對象地址; ? 默認(rèn)的存儲類型為自動(dòng)存儲類型 (auto),目前也僅以自動(dòng)存儲類型為例,以后將通過例子進(jìn)一步介紹存儲類型。 ? 如果改變 p的內(nèi)容 , 例如使用語句 “ p=amp?!?, 這使得 *p=65, 它與 y 同步 , 不再與 x有任何關(guān)系 。 從例子中可見 , 指針本身的地址不會變化 , 它反映了系統(tǒng)需要為指針 p分配地址這一概念 。x一樣 , 以后也不再考慮 amp。 【 例 】 演示指針及其 運(yùn)算概念的例子。 void main( ) { int x=56, y=65,*p。x。p,*pendl。y。p,*pendl。 //通過指針改變對象內(nèi)容 couty,p,amp。 ++p。p,*pendl。 //對指針進(jìn)行減一運(yùn)算 coutx,p,amp。 p=p2。p,*pendl。p,*(p+2)endl。p,*pendl。 coutx,p,amp。 } ? 為了好理解 , 在程序輸出的右方給出輸出前的操作過程 。x。y。 56,0012FF7C,0012FF74,56 //++p。 56,0012FF70,0012FF74,858993460 //p=p2。 ? 指針可以和整數(shù)相加減。但這里必須弄清楚,編譯程序在具體實(shí)現(xiàn)時(shí)并不是直接把 n的值加到 p上去, 而是要把 n乘上一個(gè)“ 比例因子 ” ,然后再加上 p。 ? 對用戶來說,不需要了解編譯程序內(nèi)部的實(shí)現(xiàn),從用戶觀點(diǎn)看來,只要將 p+n看成是將指針 p移動(dòng) n個(gè)數(shù)(不必涉及每個(gè)數(shù)所占的字節(jié)數(shù))的位置。 當(dāng)執(zhí)行加 2操作后 , p所指向地址雖然惟一 , 但已經(jīng)不是所需內(nèi)容 。 這就是使用指針的危險(xiǎn)之處 。也可以不改變 p,將相對 p的地址的內(nèi)容取出,這就是使用 *(p177。程序演示了使用 *(p+2)輸出 85,但這并沒有改變 *p的內(nèi)容,這可從下面輸出 *p的結(jié)果得到證實(shí)?!睂?p指向的內(nèi)容改變?yōu)?85。 n)和 *(p177。 ③ 對指針變量 *p1和 *p2來說 , 下面兩種賦值的方法不是等價(jià)的: p1=p2。 p1=p2表示指針 p1放棄了原來指向的地址 , 與 p2指向同一
點(diǎn)擊復(fù)制文檔內(nèi)容
職業(yè)教育相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1