2.2.2宣告和定義的關係
宣告使得名字為程式所知,乙個檔案如果想使用別處的定義的名字則必須包含對名字的宣告,而定義則負責建立與名字相聯的實體
extern
int i;//宣告而非定義
int i//宣告並且定義j
初始化的宣告等於定義
變數能被定義一次,但可以被多次宣告
2.2.4名字的作用域
巢狀得的作用域
作用域能彼此包含,被包含(或者說被巢狀)的作用域被稱為內層作用域
作用域一旦宣告了某個名字,它巢狀的所有作用域都能被訪問該名字。同時,允許在內層作用域重新定義外層作用域已有的名字
#include
int reused=42;//擁有全域性作用域
int main()
{int unique=0;//擁有塊作用域
std::cout
<"; "
//42 ;0
int reused=0;//新建區域性變數reused,覆蓋了全域性變數reused
std::cout
<" "
//輸出0,0
std::cout
<<::resued<<""
//::顯式地訪問全域性變數輸出結果42 0;
2.3.1引用
引用為物件起另外乙個名字
int ival=1024;
int &refval=ival;//refval指向ival
int &refval2//錯誤,引用必須被初始化
一般在初始化變數時初始值會拷貝到新建的物件中,然而定義引用時,程式把引用和它的初始值繫結在一起而不是將初始值拷貝給引用,一旦初始值完成,引用將它的初始值物件一直繫結在一起
引用就是別名:引用並非物件,相反的,它只為乙個已經存在的物件所起的另外乙個名字。
定義了乙個引用之後對其進行的操作都是與之繫結的物件上進行的:
refval=2;
int ii=refval;
引用的定義
允許在一條語句中定義多個引用,其中每個引用識別符號都必須以符號&開頭:
int i=1024,i2=2048;//i和i2都是int
int &r=i,r2=i2;//r是乙個引用,與i繫結在一起,r2是int
int i3=1024,&ri=i3;
int &r3=i3,&r4=i2;
int &refval4=10;錯誤:引用型別的初始值必須是乙個物件
double dval=3.14;
int &refval5=dval; 錯誤:引用型別的初始值必須是int型物件
C Primer讀書筆記(三
1.迭代器 所有標準庫容器都可以使用迭代器,但只有少數容器可以使用下標。auto b v.begin c v.endl 如果容器空,則be都指向尾後迭代器 迭代器支援的運算子,iter iter 成員,大多數不支援 vector iterator iter string iterator it2 i...
C primer 讀書筆記
第2 章 變數和基本型別 1 變數直接初始化和變數 複製初始化 int ival 1024 direct initialization int ival 1024 copy initialization 初始化不是賦值 2 內建型別復 制初始化和直接初始化幾乎沒有區別 但 對類型別物件來 說,有些初...
C Primer讀書筆記
前些日子開始看 c primer 順便做一些筆記,既有書上的,也有自己理解的。因為剛學c 不久,筆下難免有謬誤之處,行文更是凌亂 所幸不是用來顯配的東西,發在linuxsir只是為了方便自己閱讀記憶,以防只顧上網忘了正事。書看了不到一半,所以大約才寫了一半,慢慢補充。const要注意的問題 1 下面...