c primer 讀書筆記三

2021-08-11 18:15:10 字數 1341 閱讀 4168

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 下面...