C說話中常量指針與指針常量差別淺析。本站提示廣大學習愛好者:(C說話中常量指針與指針常量差別淺析)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中常量指針與指針常量差別淺析正文
常量指針是指--指向常量的指針,望文生義,就是指針指向的是常量,即,它不克不及指向變量,它指向的內容不克不及被轉變,不克不及經由過程指針來修正它指向的內容,然則指針本身不是常量,它本身的值可以轉變,從而指向另外一個常量。
指針常量是指--指針自己是常量。它指向的地址是弗成轉變的,但地址裡的內容可以經由過程指針轉變。它指向的地址將伴其平生,直到性命周期停止。有一點須要留意的是,指針常量在界說時必需同時賦初值。
注:也有人將這兩個稱號的界說與寄義反過去以為:“指針常量:望文生義它的中間詞是“常量”這是重點,指針就是一個潤飾的感化。所以這裡的指針照樣一個變量,它的內容寄存的是常量的地址。常量指針:症結字是指針,它是不克不及被轉變的,由於指針老是指向地址的,所以它的意思是它指向的地址是不克不及被轉變的”。但我小我以為後者不公道,所以應用前者。
2.應用辦法:
應用時寫法上的差別:常量指針:const在*之前 指針常量:const在*以後。
固然我們也能夠界說常量指針常量,那就須要加上兩個const,一前一後!以上只是從界說上給出二者的實質上的分歧,在詳細應用上,還有許多變更,但萬變不離其宗,我們可以依據它的道理剖析出各類龐雜用法的本質。
3. 應用舉例
3.1 常量指針應用:
如intb, c;
int const *a;
a = &b;
a = &c;
都可以,惟獨它指向的內存不克不及被修正。如:*a=20;這是守法的!毛病!
3.2 指針常量應用
如Inta;
Int aTest;
Int * const p =&a;
表現p是一個常量指針它指向變量a的內存。指針常量不克不及再用p指向其他變量,如p= & aTest; 毛病!可以修正指向內存的值,如:*p = 20;指針常量聲明的時刻必需向我那樣賦初值。
指針常量也不克不及釋放,用p指向NULL,即
p= NULL;
會在編譯時報錯
/opt/test/test.c:649:error: assignment of read-only variable`p'
還有一個記住他們分歧情勢的技能!看const症結字,他前面的弗成修正,如int* const a = &b; 前面是a,則解釋a不克不及修正!
intconst * a = &b;前面是*a則解釋*a弗成被修正!
在很多多少書上或MSDN是常常用constint a=5; int b=6; const int *p=&b;
其實constint*和intconst*一樣,就是常量指針也就是它所指向的數據(在這是int)是常量,它本身的數據類型是constint*
還有constint *p=&b;是可以的固然b不是常量。然則constint a=6; int *p=&a;會報錯,由於它清除了a的const屬性
4.應用技能
應用指針常量可以增長代碼的靠得住性和履行效力。
如Inta;
Int * const p =&a;
增長靠得住性:不消擔憂p被修正或釋放招致非預期成果;
增長履行效力:不消在子函數中對p做為空檢討可以進步效力。