亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言詳細(xì)講解const的用法

 更新時(shí)間:2022年05月10日 08:41:59   作者:lonely-hermit  
今天探討const,首先來說是將變量常量化。為什么要將變量常量化,原因有諸多好處有諸多。比如可以使數(shù)據(jù)更加安全不會(huì)被修改

一、int const a / const int a

int 和const 都作為一個(gè)類型限定詞,有相同的地位,所以誰在前誰在后無所謂了,標(biāo)題中的這兩種寫法是一致的。

這是我們常規(guī)的用途,我們發(fā)現(xiàn)這樣的話我們對(duì)a已經(jīng)不能做任何修改了。

int main() {
    int const a = 10;
    printf("%d\n",a);
    return 0;
}

真的不能修改嗎?未必的

int main() {
    int const a = 10;
    int *p = &a;
    *p = 20;
    printf("%d\n",a);
    return 0;
}

成功修改,這是為什么呢,其實(shí)也很簡(jiǎn)單,這與編譯器有關(guān),gcc編譯器中const是通過編譯器在編譯的時(shí)候執(zhí)行檢查來確保實(shí)現(xiàn)的,也就是檢查的時(shí)候我發(fā)現(xiàn)你沒有修改a的值,那我就認(rèn)為你是對(duì)的。更深入一層的原因,是因?yàn)間cc把const類型的常量也放在了data段,其實(shí)和普通的全局變量放在data段是一樣實(shí)現(xiàn)的,只是通過編譯器認(rèn)定這個(gè)變量是const的,運(yùn)行時(shí)并沒有標(biāo)記const標(biāo)志,所以只要騙過編譯器就可以修改了。

這個(gè)本質(zhì)上是C語言的問題,因?yàn)镃語言就沒有強(qiáng)制要求說const就是不能修改的,所以在C語言中使用const,就好象是 一種道德約束而非法律約束,所以大家使用const時(shí)更多是傳遞一種信息,就是告訴編譯器、也告訴讀程序的人,這個(gè)變量是不應(yīng)該也不必被修改的。而且我的理解中,這個(gè)東西其實(shí)設(shè)置為了強(qiáng)制不可變?cè)谀撤N程度上不也就限制了C語言的靈活性嘛,c的奇淫巧技不就依靠C語言的靈活性實(shí)現(xiàn)的嘛,所謂bug變特性,我的猜測(cè)哈,不知道丹尼斯·里奇是不是也是這么想的。

二、const int(*p)/int const(*p)

其實(shí)標(biāo)題是很好理解的,我們修飾了*p,使得p的指向不能被改變了。

int main() {
    int a = 10;
    int const (*p) = &a;
    printf("%d\n",*p);
    return 0;
}

上面的程序很好理解,p指向了a,p被const修飾,指向的對(duì)象a已經(jīng)不能被修改了,下面的程序輸出20就說明出了問題,這個(gè)還是上面我們講到的那個(gè)問題,這是一個(gè)君子約定。

int main() {
    int a = 10;
    int const (*p) = &a;
    a = 20;
    printf("%d\n",*p);
    return 0;
}

下面的四種寫法等價(jià)

int const (*p)
const int (*p)
int const *p
const int *p

三、int*const p

那么如何聲明一個(gè)自身是常量指針呢?方法是讓const盡可能的靠近p,下面的這個(gè)就是

int main() {
    int a = 10;
    int b = 20;
    int* const p = &a;
    printf("%d\n",*p);
    return 0;
}

指針只能指向a,指向b就報(bào)錯(cuò)。地址只能賦值一次。

這里有一個(gè)簡(jiǎn)便的區(qū)分方法:沿著*號(hào)劃一條線,如果const位于*的左側(cè),則const就是用來修飾指針?biāo)赶虻淖兞?,即指針指向?yàn)槌A?如果const位于*的右側(cè),const就是修飾指針本身,即指針本身是常量。

四、const用于函數(shù)的地址傳遞參數(shù)

void func(const int *p);

這種形式通常用于在數(shù)組形式的參數(shù)中模擬傳值調(diào)用。也就是相當(dāng)于函數(shù)調(diào)用者聲稱:"我給你一個(gè)指向它的指針,但你不能去修它。"如果函數(shù)編寫者遵循了這個(gè)約定,那么就相當(dāng)于模擬了值傳遞。這也是const最有用之處了:用來限定函數(shù)的形參,這樣該函數(shù)將不會(huì)修改實(shí)參指針?biāo)傅臄?shù)據(jù)。這里注意了,是函數(shù)不應(yīng)該去修改而不是不能修改,也就是說const不能阻止參數(shù)的修改(原因見上)。

到此這篇關(guān)于C語言詳細(xì)講解const的用法的文章就介紹到這了,更多相關(guān)C語言const內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt實(shí)現(xiàn)棋盤游戲

    Qt實(shí)現(xiàn)棋盤游戲

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)棋盤游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++ 自由存儲(chǔ)區(qū)是否等價(jià)于堆你知道嗎

    C++ 自由存儲(chǔ)區(qū)是否等價(jià)于堆你知道嗎

    自由存儲(chǔ)是C++中通過new與delete動(dòng)態(tài)分配和釋放對(duì)象的抽象概念,而堆(heap)是C語言和操作系統(tǒng)的術(shù)語,是操作系統(tǒng)維護(hù)的一塊動(dòng)態(tài)分配內(nèi)存
    2021-08-08
  • C語言字符串大小比較

    C語言字符串大小比較

    本文給大家分享給大家的是C語言的字符串大小比較的函數(shù),有需要的小伙伴可以參考下。
    2015-07-07
  • QT串口通信的實(shí)現(xiàn)方法

    QT串口通信的實(shí)現(xiàn)方法

    如果用qt寫程序作為上位機(jī),然后通過和usb和下位機(jī)通信的時(shí)候,就需要用到qt中的串口通信了。本文介紹了QT串口通信的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C++使用遞歸函數(shù)和棧操作逆序一個(gè)棧的算法示例

    C++使用遞歸函數(shù)和棧操作逆序一個(gè)棧的算法示例

    這篇文章主要介紹了C++使用遞歸函數(shù)和棧操作逆序一個(gè)棧的算法,結(jié)合實(shí)例形式分析了C++遞歸函數(shù)與逆序棧的相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • MoveWindow() SetWindowPos()的區(qū)別于聯(lián)系

    MoveWindow() SetWindowPos()的區(qū)別于聯(lián)系

    這篇文章主要介紹了VC++中MoveWindow() SetWindowPos()的區(qū)別于聯(lián)系,需要的朋友可以參考下
    2015-01-01
  • C語言中讀取時(shí)間日期的基本方法

    C語言中讀取時(shí)間日期的基本方法

    這篇文章主要介紹了C語言中讀取時(shí)間日期的基本方法,分別是time()函數(shù)和gmtime()函數(shù)的使用,注意返回值的區(qū)別,需要的朋友可以參考下
    2015-08-08
  • c++深入淺出講解堆排序和堆

    c++深入淺出講解堆排序和堆

    在c++里有很多排序方法,比如相對(duì)簡(jiǎn)單的冒泡排序、選擇排序、插入排序,還有 STL里的sort函數(shù)  手寫快排  歸并排序等,還有就是堆排序,這次主要說堆排序和堆
    2022-03-03
  • C語言實(shí)現(xiàn)旅游景點(diǎn)咨詢系統(tǒng)

    C語言實(shí)現(xiàn)旅游景點(diǎn)咨詢系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)旅游景點(diǎn)咨詢系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C語言中的字符(char)詳細(xì)講解

    C語言中的字符(char)詳細(xì)講解

    本篇文章主要介紹C語言中char的知識(shí),并附有代碼實(shí)例,以便大家在學(xué)習(xí)的時(shí)候更好的理解,有需要的可以看一下
    2016-07-07

最新評(píng)論