簡(jiǎn)單的const關(guān)鍵字里面的學(xué)問(wèn)還是挺大的,越是基礎(chǔ)的知識(shí)越是容易忘卻。
1.在c語(yǔ)言中const
在C語(yǔ)言中 const關(guān)鍵字用來(lái)修飾變量名為只讀,僅此而已。
也就是說(shuō)通過(guò)變量名不可以修改它的值,但是可以通過(guò)得到它的地址來(lái)修改他的值。
#include《stdio.h》int main(){
const int a = 10;
int *p = (int *)&a;
*p = 20;
printf(“a = %d
”,a);
return 0;}
同時(shí)被const修飾的全局變量也就是外連接,其他源文件要引用只需要加上extern即可。
被const修飾的全局變量不能以地址的形式進(jìn)行修改,由于它在內(nèi)存中位于常量區(qū),他的地址空間是只讀的。在C語(yǔ)言中被const的變量是直接被分配內(nèi)存的。
2.c++中的const
2.1 c++中const的使用
c++中 const關(guān)鍵字被用來(lái)表示常量,和#define的作用一樣。
在C++中能否通過(guò)地址來(lái)改變它的值,取決于是否給他分配了內(nèi)存。主要分以下三中情況
1、const int a = 10;
這種情況是不分配內(nèi)存的,直接被寫(xiě)在符號(hào)表中,即使后面被分配了內(nèi)存,那么a的值也不會(huì)被改變,輸出的值一直都是符號(hào)表中的值
``` #include《iostream》 int main(){
const int a = 10;
std::cout 《《 “original a =” 《《 a 《《 std::endl;
int *p = (int *)&a;
*p = 200;
std::cout 《《 “*p =” 《《 *p 《《 std::endl;
std::cout 《《 “l(fā)ast a =” 《《 a 《《 std::endl;
return 0; } ```
測(cè)試結(jié)果如下圖所示:
2、int b =100;
const int a = b;
3、const person per ={"name","id"}
2和3這種情況都是直接分配內(nèi)存的,并不會(huì)被寫(xiě)在符號(hào)表中,它的值是可以通過(guò)地址訪問(wèn)的方式來(lái)改變的。
2.2 c++中const的使用建議
在c++中盡量將宏定義#define 替換為 const
由于#define在編譯的預(yù)處理階段就替換為相對(duì)應(yīng)的常量,假如 #define Max 1024; 那么我們?cè)谟捎谶@發(fā)生錯(cuò)誤,他只會(huì)提示1024出現(xiàn)錯(cuò)誤,
而我們換成const int Max = 1024;系統(tǒng)就會(huì)提示我們這一行發(fā)生了錯(cuò)誤,并且定義到相對(duì)應(yīng)的行。
2.3 常量指針與指針常量的區(qū)別
這一題目都是面試中好多公司愿意問(wèn)的問(wèn)題,剛好學(xué)習(xí)到這,就把這塊也納入到本章節(jié)中。
指針常量
int *const p;,顧名思義它是一個(gè)常量,只不過(guò)被指針修飾。
int a = 10, b =20;int *const p = &a;
p = &b; //×*p = 30; //√
常量指針
const int *p;p是一個(gè)常量
int a = 10, b =20;int *const p = &a;
p = &b; //√*p = 30; //×
審核編輯 :李倩
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7575瀏覽量
134041 -
C++
+關(guān)注
關(guān)注
21文章
2085瀏覽量
73301 -
CONST
+關(guān)注
關(guān)注
0文章
43瀏覽量
8125
原文標(biāo)題:知識(shí)分享:const 在C語(yǔ)言與C++中的區(qū)別與使用!
文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論