變量
注意:全局變量和局部變量的使用,以及全局變量會被局部變量所覆蓋,常考!!!
一、變量
a. 變量提供一個具名的、可供操作的存儲空間;
b. c++中每個變量都有其數據類型,數據類型決定着變量所佔的內存空間大小和佈局方式,該空間能存儲的值的範圍,以及能夠進行的運算。*
- 變量定義
變量列表初始化
初始化不是賦值,初始化的含義是創建變量時賦予其一個初始值,而賦值的含義是把對象的當前值擦除,而以一個新值代替。
初始化的幾種方式:
a. int test=0;
b. int test={0};
c. int test{ 0 };
d. int test( 0 );默認初始化
(一)內置類型初始化
a. 如果定義變量沒有指定初始值,則變量被默認初始化,默認值是什麼由變量類型決定,同時定義變量的位置也會有影響。
b. 如果是內置類型的變量未被顯示初始化,它的值由定義的位置決定!!定義在任何函數體之外的變量被初始化爲0;
c. 定義在函數體內部的內置類型變量將不會被初始化。
d. 未被初始化的內置類型變量值是未定義的,如果試圖拷貝或以其他形式訪問此類值將引發錯誤;例子:
std::string global_str;
int global_int;
int main()
{
int local_int;
std::string local_str;
}
// 注意:global_str和local_str的初始值均爲空字符串,global_int 初始值爲0,local_int沒有初始值。
(二)類的初始化 ( 7.7.3節 類的默認初始化)
類通過定義一個或多個構造函數來控制類對象的初始化。如果一個類有默認構造函數,則無論變量在哪兒定義,默認構造函數都會被調用。
4.變量的聲明與定義
a. C++通過extern關鍵字聲明,向程序表明變量的類型和名字。**因爲extern是聲明,所以不分配存儲空間。**
b. 一個變量可以聲明多次,但只能定義一次
c. 如果聲明有初始化式,那麼它可以被當作是定義,即使有聲明標記extern,如:
extern double pi=3.1415;//定義`
5.標識符
6.名字的作用域
全局變量和局部變量
作用域中一旦聲明瞭某個名字,它所嵌套着的所有作用域中都能訪問該名字,同時,允許在內層作用域中重新定義外層作用域已有的名字。
例子:
#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;
}