0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

const在C語(yǔ)言與C++中的區(qū)別與使用!

C語(yǔ)言編程學(xué)習(xí)基地 ? 來(lái)源:C語(yǔ)言編程學(xué)習(xí)基地 ? 作者:C語(yǔ)言編程學(xué)習(xí)基地 ? 2022-04-24 16:08 ? 次閱讀

簡(jiǎn)單的const關(guān)鍵字里面的學(xué)問(wèn)還是挺大的,越是基礎(chǔ)的知識(shí)越是容易忘卻。

a1e3ed36-c39f-11ec-bce3-dac502259ad0.jpg

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)存的。

a1fb1858-c39f-11ec-bce3-dac502259ad0.png

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é)果如下圖所示:

a20ac99c-c39f-11ec-bce3-dac502259ad0.png

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; //×

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134041
  • C++
    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)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ModusToolbox 3.2c代碼包含c++代碼的正確步驟是什么?

    使用 ModusToolbox 3.2 我有一個(gè)用純 C 語(yǔ)言編寫(xiě)的 XMC4700 項(xiàng)目。 我正在嘗試添加一些 C++ 函數(shù),并將其合并到我的原始代碼。 我可以構(gòu)建獨(dú)立的 .cpp
    發(fā)表于 07-23 08:21

    C++語(yǔ)言基礎(chǔ)知識(shí)

    電子發(fā)燒友網(wǎng)站提供《C++語(yǔ)言基礎(chǔ)知識(shí).pdf》資料免費(fèi)下載
    發(fā)表于 07-19 10:58 ?6次下載

    C++實(shí)現(xiàn)類(lèi)似instanceof的方法

    函數(shù),可實(shí)際上C++沒(méi)有。但是別著急,其實(shí)C++中有兩種簡(jiǎn)單的方法可以實(shí)現(xiàn)類(lèi)似Java的instanceof的功能。
    的頭像 發(fā)表于 07-18 10:16 ?355次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>中</b>實(shí)現(xiàn)類(lèi)似instanceof的方法

    PLC編程語(yǔ)言C語(yǔ)言區(qū)別

    工業(yè)自動(dòng)化和計(jì)算機(jī)編程領(lǐng)域中,PLC(可編程邏輯控制器)編程語(yǔ)言C語(yǔ)言各自扮演著重要的角色。盡管兩者都是編程語(yǔ)言,但它們
    的頭像 發(fā)表于 06-14 17:11 ?1572次閱讀

    C/C++兩種宏實(shí)現(xiàn)方式

    #ifndef的方式受C/C++語(yǔ)言標(biāo)準(zhǔn)支持。它不僅可以保證同一個(gè)文件不會(huì)被包含多次,也能保證內(nèi)容完全相同的兩個(gè)文件(或者代碼片段)不會(huì)被不小心同時(shí)包含。
    的頭像 發(fā)表于 04-19 11:50 ?432次閱讀

    c語(yǔ)言,c++,java,python區(qū)別

    操作系統(tǒng)、嵌入式系統(tǒng)等對(duì)性能要求較高的場(chǎng)景。C語(yǔ)言的語(yǔ)法相對(duì)簡(jiǎn)單,學(xué)習(xí)曲線較平緩,也是學(xué)習(xí)其他高級(jí)語(yǔ)言的入門(mén)語(yǔ)言。 C++
    的頭像 發(fā)表于 02-05 14:11 ?1359次閱讀

    vb語(yǔ)言c++語(yǔ)言區(qū)別

    VB語(yǔ)言C++語(yǔ)言是兩種不同的編程語(yǔ)言,雖然它們都屬于高級(jí)編程語(yǔ)言,但在設(shè)計(jì)和用途上有很多區(qū)別
    的頭像 發(fā)表于 02-01 10:20 ?1522次閱讀

    C++簡(jiǎn)史:C++是如何開(kāi)始的

    的 MISRA C++:2023 博客系列的第二部分。 在這篇博客,我們將深入探討 C++ 的歷史、編程語(yǔ)言多年來(lái)的發(fā)展歷程以及它的下一步發(fā)展方向。
    的頭像 發(fā)表于 01-11 09:00 ?426次閱讀
    <b class='flag-5'>C++</b>簡(jiǎn)史:<b class='flag-5'>C++</b>是如何開(kāi)始的

    C語(yǔ)言C++那些不同的地方

    ++11標(biāo)準(zhǔn)。根據(jù)不同的標(biāo)準(zhǔn),它們的功能也會(huì)有所不同,但是越新的版本支持的編譯器越少,所以本文討論的時(shí)候使用的C語(yǔ)言標(biāo)準(zhǔn)是C89,C++標(biāo)
    的頭像 發(fā)表于 12-07 14:29 ?773次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>和<b class='flag-5'>C++</b><b class='flag-5'>中</b>那些不同的地方

    如何選擇創(chuàng)建c語(yǔ)言c++

    選擇創(chuàng)建 C 語(yǔ)言C++ 都需要綜合考慮多個(gè)因素。決定使用哪種語(yǔ)言之前,我們需要對(duì)這兩種語(yǔ)言
    的頭像 發(fā)表于 11-27 15:58 ?455次閱讀

    visualc++怎么新建c語(yǔ)言文件

    Visual C++ 是一個(gè)集成開(kāi)發(fā)環(huán)境(IDE),用于開(kāi)發(fā) CC++ 程序。 Visual C++
    的頭像 發(fā)表于 11-27 15:57 ?2809次閱讀

    c++怎么開(kāi)始編程

    C++是一種高級(jí)的、通用的編程語(yǔ)言,用于開(kāi)發(fā)各種類(lèi)型的應(yīng)用程序。它是從C語(yǔ)言演變而來(lái),也是一種靜態(tài)類(lèi)型語(yǔ)言,可以
    的頭像 發(fā)表于 11-27 15:56 ?732次閱讀

    C/C++語(yǔ)言學(xué)習(xí)大全套

    電子發(fā)燒友網(wǎng)站提供《C/C++語(yǔ)言學(xué)習(xí)大全套.rar》資料免費(fèi)下載
    發(fā)表于 11-18 14:33 ?2次下載
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>語(yǔ)言</b>學(xué)習(xí)大全套

    C++之父新作帶你勾勒現(xiàn)代C++地圖

    為了幫助大家解決這些痛點(diǎn)問(wèn)題,讓大家領(lǐng)略現(xiàn)代C++之美,掌握其中的精髓,更好地使用C++C++之父Bjarne Stroustrup坐不住了,他親自操刀寫(xiě)就了這本《C++之旅》!
    的頭像 發(fā)表于 10-30 16:35 ?696次閱讀
    <b class='flag-5'>C++</b>之父新作帶你勾勒現(xiàn)代<b class='flag-5'>C++</b>地圖

    嵌入式C/C++語(yǔ)言精華文章集錦

    /C++編程,我們經(jīng)常要傳送的不是簡(jiǎn)單的字節(jié)流(char型數(shù)組),而是多種數(shù)據(jù)組合起來(lái)的一個(gè)整體,其表現(xiàn)形式是一個(gè)結(jié)構(gòu)體。 經(jīng)驗(yàn)不足的開(kāi)發(fā)人員往往將所有需要傳送的內(nèi)容依順序保存在 char 型數(shù)組,通過(guò)
    發(fā)表于 09-25 08:00