變量是一個具名的、可供程序操作的存儲空間。
變量定義可同時多個進行:
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 //定義任何包含了顯式初始化的聲明就是定義,也就是如果有初始值,那么就變成了定義。
第三條輸出語句中使用全局作用域,::域操作符左側(cè)為空時,默認(rèn)向全局作用域發(fā)出請求,因為全局作用域本身沒有名字。因此,第三條輸出語句輸出使用全局變量reused。
此外,引用只能綁定在對象上,而不能與字面值或某個表達(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資格。
int null = 0, *p = null;這句代碼是否合法? 不合法。 指針并不能直接等于一個整型變量。 *p = &null ;
:用于選擇并返回操作數(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))
新聞熱點
疑難解答