對程序的結(jié)構(gòu)的相關學習:
一 ?指向?qū)ο蟮闹羔様?shù)組
數(shù)組的元素是指針型
Point? *pa[2];
由pa[0],pa[1]兩個指針組成仆潮,都指向Point類型的對象南用。
指針常量和常量指針(指向常量的指針)
指針常量:
在指針定義語句的指針名前加const, 表示指針本身是常量。
int a; int* const p=&a;? 定義時必須初始化
指針值p不可以修改番捂,指針指向的內(nèi)容可以修改。
即p是常量,不可以作為左值進行運算潮酒,*p可以修改
左值:是對應內(nèi)存數(shù)據(jù)的一個表達式,左值對應的內(nèi)存空間的內(nèi)容允許刷新邪蛔〖崩瑁可以出現(xiàn)在賦值運算符的左側(cè)。
右值:右值指的是引用了一個存儲在某個內(nèi)存地址里的數(shù)據(jù)侧到。出現(xiàn)在賦值運算符的右側(cè)勃教。
要求左值運算:++,--,+=等
二 常對象和常成員函數(shù)
常對象:數(shù)據(jù)成員值在對象的整個生存期間內(nèi)不能被改變匠抗。
即常對象定義是必須進行初始化故源,而且不能被更改。
三 引用(reference)的概念
為一個變量汞贸、函數(shù)等對象規(guī)定一個別名绳军,該別名稱為引用印机。此后,對別名的操作即是對別名所代表的對象的操作门驾。
引用必須初始化射赛。引用一旦被聲明則不能再修改.
為提高可讀性,引用與變量奶是、指針定義盡量不在同一行咒劲。 盡量避免這樣的語句int a,&ra=a,*p=&a;
void &a=3;//error
void 本質(zhì)不是一個類型,只是在語法上相當于一個類型诫隅,沒有該類型的對象腐魂。
形參和實參結(jié)合規(guī)則:
形參為引用時,凡遇到形參(引用)的地方逐纬,全部用實參(對象)來代替蛔屹。
參數(shù)結(jié)合符合初始化標準
傳遞引用給函數(shù)與傳遞指針的效果相同。
可讀性比指針傳遞好(與傳值方式的調(diào)用可讀性相同豁生,性能卻強于傳值方式)
可使用引用傳遞從函數(shù)返回多個值(指針和引用都可以)
四 引用和指針的關系
指針是個變量兔毒,可再賦值;? 而引用建立時必須進行初始化并且決不會再關聯(lián)其它不同的變量甸箱。
指針操縱兩個實體(指針值育叁、指向的值);引用只能操縱一個實體芍殖。
引用在內(nèi)部用指針實現(xiàn) 豪嗽,被看成是指針常量,不能操作自身的地址值豌骏,只能訪問所指向的實體龟梦。
在語言層面,引用的用法和對象一樣窃躲;在二進制層面计贰,引用一般都是通過指針來實現(xiàn)的,只不過編譯器幫我們完成了轉(zhuǎn)換.
實際上“引用”可以做的任何事情“指針”也都能夠做蒂窒,為什么還要“引用”躁倒?
答案是“用適當?shù)墓ぞ咦銮∪缙浞值墓ぷ鳌薄?/p>
指針能夠毫無約束地操作內(nèi)存中的東西,盡管指針功能強大洒琢,但是非常危險秧秉。? 引用是指針出于安全考慮的替代品。
在以下情況下你應該使用指針:
一是你考慮到存在不指向任何對象的可能(在這種情況下纬凤,你能夠設置指針為空)? ? ? ? 二是你需要能夠在不同的時刻指向不同的對象(在這種情況下福贞,你能改變指針的指向)撩嚼。
如果總是指向一個對象并且一旦指向一個對象后就不會改變指向停士,那么你應該使用引用挖帘。
用const 限定引用
用const 限定引用聲明方式:
int? i;? const int& p=i;
用這種方式聲明的引用,不能通過引用對目標變量的值進行修改,保證了引用的安全性恋技。
作為參數(shù)可以保證在函數(shù)執(zhí)行時不被修改
int f(const int& cs){……}
int main(){
int s;
f(s);
//…….
}
int i;
const int * p=&i拇舀;
const int& p=i;
效率相同
引用的使用-函數(shù)調(diào)用作為左值
int a=0,b=0,c=0;
int & count(int k)
{
if(k>60) return(a);
if(k<=60&&k>30) return(b);
if(k<=30) return(c);
}
int main()
{int i,j;
for(i=0;i<15;i++)
{
cin>>j;
count(j)++;
}
cout<