簡單的const關鍵字里面的學問還是挺大的,越是基礎的知識越是容易忘卻。
1.在c語言中const
在C語言中 const關鍵字用來修飾變量名為只讀,僅此而已。
也就是說通過變量名不可以修改它的值,但是可以通過得到它的地址來修改他的值。
#include《stdio.h》int main(){
const int a = 10;
int *p = (int *)&a;
*p = 20;
printf(“a = %d
”,a);
return 0;}
同時被const修飾的全局變量也就是外連接,其他源文件要引用只需要加上extern即可。
被const修飾的全局變量不能以地址的形式進行修改,由于它在內存中位于常量區(qū),他的地址空間是只讀的。在C語言中被const的變量是直接被分配內存的。
2.c++中的const
2.1 c++中const的使用
c++中 const關鍵字被用來表示常量,和#define的作用一樣。
在C++中能否通過地址來改變它的值,取決于是否給他分配了內存。主要分以下三中情況
1、const int a = 10;
這種情況是不分配內存的,直接被寫在符號表中,即使后面被分配了內存,那么a的值也不會被改變,輸出的值一直都是符號表中的值
``` #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; } ```
測試結果如下圖所示:
2、int b =100;
const int a = b;
3、const person per ={"name","id"}
2和3這種情況都是直接分配內存的,并不會被寫在符號表中,它的值是可以通過地址訪問的方式來改變的。
2.2 c++中const的使用建議
在c++中盡量將宏定義#define 替換為 const
由于#define在編譯的預處理階段就替換為相對應的常量,假如 #define Max 1024; 那么我們在由于這發(fā)生錯誤,他只會提示1024出現錯誤,
而我們換成const int Max = 1024;系統(tǒng)就會提示我們這一行發(fā)生了錯誤,并且定義到相對應的行。
2.3 常量指針與指針常量的區(qū)別
這一題目都是面試中好多公司愿意問的問題,剛好學習到這,就把這塊也納入到本章節(jié)中。
指針常量
int *const p;,顧名思義它是一個常量,只不過被指針修飾。
int a = 10, b =20;int *const p = &a;
p = &b; //×*p = 30; //√
常量指針
const int *p;p是一個常量
int a = 10, b =20;int *const p = &a;
p = &b; //√*p = 30; //×
審核編輯 :李倩
-
C語言
+關注
關注
180文章
7614瀏覽量
137732 -
C++
+關注
關注
22文章
2114瀏覽量
73859 -
CONST
+關注
關注
0文章
45瀏覽量
8187
原文標題:知識分享:const 在C語言與C++中的區(qū)別與使用!
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
Spire.XLS for C++組件說明
![Spire.XLS for <b class='flag-5'>C++</b>組件說明](https://file1.elecfans.com/web3/M00/05/E7/wKgZO2eFwUuAbuoQAAAbn_khf8A091.png)
AKI跨語言調用庫神助攻C/C++代碼遷移至HarmonyOS NEXT
同樣是函數,在C和C++中有什么區(qū)別
ostream在c++中的用法
ModusToolbox 3.2在c代碼中包含c++代碼的正確步驟是什么?
PLC編程語言和C語言的區(qū)別
SEGGER編譯器優(yōu)化和安全技術介紹 支持最新C和C++語言
![SEGGER編譯器優(yōu)化和安全技術介紹 支持最新<b class='flag-5'>C</b>和<b class='flag-5'>C++</b><b class='flag-5'>語言</b>](https://file1.elecfans.com/web2/M00/EC/80/wKgaomZew0OAa4J1AAAcf4qxt2I454.png)
C/C++中兩種宏實現方式
鴻蒙OS開發(fā)實例:【Native C++】
![鴻蒙OS開發(fā)實例:【Native <b class='flag-5'>C++</b>】](https://file1.elecfans.com/web2/M00/C8/31/wKgZomYZMTCAaDv3AAY5x13C324319.jpg)
使用 MISRA C++:2023? 避免基于范圍的 for 循環(huán)中的錯誤
![使用 MISRA <b class='flag-5'>C++</b>:2023? 避免基于范圍的 for 循環(huán)中的錯誤](https://file1.elecfans.com/web2/M00/A9/66/wKgZomUl7m-AHJX6AABuJjgxs14678.png)
為什么很少用C++開發(fā)單片機
![為什么很少用<b class='flag-5'>C++</b>開發(fā)單片機](https://file1.elecfans.com/web2/M00/C6/8F/wKgaomYBGYeAEfT2AAAsOmCJ4d8781.png)
C語言#define的應用
![<b class='flag-5'>C</b><b class='flag-5'>語言</b>#define的應用](https://file1.elecfans.com/web2/M00/C3/B9/wKgaomXn42eACLumAAAag1PydyU214.png)
評論