国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

2.2-2.5 變量和類型

2019-11-08 02:12:51
字體:
供稿:網(wǎng)友

2.2 變量

變量是一個具名的、可供程序操作的存儲空間。

變量定義可同時多個進行:

int sum = 0, value, units_sold = 0; //同時定義,同時賦值

變量 variable 對象 object :指一塊能存儲數(shù)據(jù)并具有某種類型的內(nèi)存空間

初始化和賦值是兩種不同意義的操作初始化不是賦值,初始化的含義是創(chuàng)建變量時賦予其一個初始值,而賦值的含義是把對象的當(dāng)前值擦除,而賦予一個新值來替代。 初始化:當(dāng)對象在創(chuàng)建時獲得了一個特定的值,我們說這個對象被初始化了。用于初始化變量的值可以是任意復(fù)雜的表達(dá)式。

// 正確:PRice先被定義并賦值,隨后被用于初始化discountdouble price = 109.99, discount = price * 0.16;// 調(diào)用函數(shù)applyDiscount,然后用函數(shù)的返回值初始化salePricedouble salePrice = applyDiscount(price, discount);

變量聲明和定義的關(guān)系 聲明(declaration):使得名字為程序所知,一個文件如果想使用別人定義的名字則必須包含的對那個名字的聲明; 定義(definition):負(fù)責(zé)創(chuàng)建與名字關(guān)聯(lián)的實體。 *==不同點:都規(guī)定了變量的類型和名字,除此之外,定義還申請存儲空間,也可能會為變量賦一個初始值。 變量只能被定義一次,但是可以被多次聲明!==*

extern int i; //聲明int j; //定義extern double pi = 3.1416 //定義

任何包含了顯式初始化的聲明就是定義,也就是如果有初始值,那么就變成了定義。

嵌套的作用域

#include <iostream>int reused = 42; //全局變量int main)(){ int unique = 0; std::cout << reused << " " << unique << std::endl; //輸出 42 0 int reused = 0; // 新建局部變量,覆蓋了全局變量 std::cout << reused << " " << unique << std::endl; // 輸出 0 0 std::cout << ::reused << " " << unique << std::endl; // 輸出 42 0 return 0;}

第三條輸出語句中使用全局作用域,::域操作符左側(cè)為空時,默認(rèn)向全局作用域發(fā)出請求,因為全局作用域本身沒有名字。因此,第三條輸出語句輸出使用全局變量reused。

引用

int ival = 1024;int &refVal = ival; //refVal指向ival,也就是是ival的另一個名字int &refVal2; // 報錯,引用對象必須被初始化

此外,引用只能綁定在對象上,而不能與字面值或某個表達(dá)式的結(jié)果綁定在一起。

int &refVal4 = 10; //錯誤doubel dval = 3.14;int &refVal5 = dval; // 錯誤:此處引用類型的初始值必須是int型對象

指針

指針與引用的不同: 1.指針本身就是一個對象,允許對指針賦值和拷貝,而且在指針的生命周期內(nèi)它可以先后指向幾個不同的對象; 2.指針無需在定義時賦值 ,在塊作用域內(nèi)若沒有被初始化,將擁有一個不確定的值。

獲取對象的地址 指針存放某個對象的地址,要想獲取該地址,需要使用取地址符。

double dval;double *pd = &dval; // 先將pd定義為一個指向int的指針,隨后初始化pd使其指向名為dval的double對象。其初始值為double型對象的地址double *pd2 = pd; //初始值是 指向double型對象的指針int *pi = pd; //錯誤,指針類型和pd的類型不匹配pi = &dval; // 錯誤,試圖把double型對象的地址賦給int型指針

指針的類型一定要和指向?qū)ο蟮念愋推ヅ洹? 利用指針訪問對象 操作符* 解引用符

int ival = 42;int *p = &ival; //p中存放的是ival的地址,p是指向變量ival的指針cout << *p; //輸出 42,由符號*得到p指向的對象。*p = 0;cout << *p; //輸出0

對解引用的對象賦值,實際上就是給指針?biāo)傅膶ο筚x值。

void*指針 void *p = &obj; // 無需關(guān)心obj是什么類型的對象

對常量的引用

const int ci = 1024;const int &r1 = ci; //正確:引用及其對應(yīng)的對象都是const形式r1 = 42; //錯誤。 r1的值無法改變int &r2 = ci; // 錯誤,無法用非常量引用去指向常量對象。

頂層const指指針本身就是個常量 底層const指指針?biāo)傅膶ο笫莻€常量 執(zhí)行對象的拷貝操作時,頂層const不受影響,而底層const,對象必須具有相同的底層const資格。

2.4.4 節(jié)練習(xí)

int null = 0, *p = null;這句代碼是否合法? 不合法。 指針并不能直接等于一個整型變量。 *p = &null ;


2.5 處理類型

dectype 類型指示符

:用于選擇并返回操作數(shù)的數(shù)據(jù)類型。不實際計算表示式的值。 decltype(f()) sum = x; //sum的類型就是函數(shù)f的返回類型 編譯器并不實際調(diào)用f,而是使用假設(shè)f被調(diào)用時返回值的類型作為sumde類型。

const int ci = 0, &cj == ci; decltype(ci) x = 0; //x的類型就是const int decltype(cj) y = x; //y的類型是ocnst int&,當(dāng)使用的表達(dá)式是一個變量時,返回該變量的類型(包括頂層const和引用在內(nèi))


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 太谷县| 色达县| 营山县| 澄迈县| 康马县| 康定县| 东阳市| 南陵县| 聂拉木县| 额济纳旗| 和林格尔县| 梅河口市| 平塘县| 全州县| 阳新县| 凤山市| 天等县| 黄骅市| 蒙山县| 临城县| 湟源县| 临猗县| 新河县| 阿勒泰市| 齐齐哈尔市| 特克斯县| 余姚市| 章丘市| 余干县| 杭锦后旗| 新巴尔虎右旗| 沙坪坝区| 西宁市| 靖安县| 射阳县| 郑州市| 确山县| 无锡市| 武功县| 上思县| 鄱阳县|