最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言詳細講解const的用法

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

一、int const a / const int a

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

這是我們常規(guī)的用途,我們發(fā)現(xiàn)這樣的話我們對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;
}

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

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

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

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

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

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

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

下面的四種寫法等價

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

三、int*const p

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

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

指針只能指向a,指向b就報錯。地址只能賦值一次。

這里有一個簡便的區(qū)分方法:沿著*號劃一條線,如果const位于*的左側(cè),則const就是用來修飾指針所指向的變量,即指針指向為常量.如果const位于*的右側(cè),const就是修飾指針本身,即指針本身是常量。

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

void func(const int *p);

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

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

相關(guān)文章

  • C++的輸入與輸出和格式化輸出

    C++的輸入與輸出和格式化輸出

    這篇文章主要介紹了詳解C++中的輸入與輸出和格式化輸出,是C++入門學習中的基礎(chǔ)知識,需要的朋友可以參考,希望能夠給你帶來幫助
    2021-11-11
  • Matlab實現(xiàn)繪制玫瑰線的示例代碼

    Matlab實現(xiàn)繪制玫瑰線的示例代碼

    這篇文章主要為大家介紹了如何利用Matlab繪制3好看的玫瑰線,文中的示例代碼講解詳細,對我們學習Matlab有一定幫助,感興趣的小伙伴可以動手試一試
    2022-08-08
  • C++智能指針之shared_ptr的具體使用

    C++智能指針之shared_ptr的具體使用

    本文主要介紹了C++智能指針之shared_ptr的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2022-05-05
  • C語言實現(xiàn)學生宿舍管理系統(tǒng)

    C語言實現(xiàn)學生宿舍管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學生宿舍管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++ const和指針詳情

    C++ const和指針詳情

    這篇文章主要介紹了C++ const和指針,關(guān)于使用const來修飾指針,有兩種不同的方式。第一種是讓指針指向一個常量對象,這樣可以防止使用該指針進行修改指向的值。第二種則是將指針本身聲明為常量,可以防止改變指針指向的位置,下面來看看文章的詳細內(nèi)容
    2021-11-11
  • C語言實現(xiàn)獲取內(nèi)存信息并輸出的實例

    C語言實現(xiàn)獲取內(nèi)存信息并輸出的實例

    這篇文章主要介紹了C語言實現(xiàn)獲取內(nèi)存信息并輸出的實例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • c語言左移和右移的示例詳解

    c語言左移和右移的示例詳解

    這篇文章主要介紹了c語言左移和右移的示例詳解,移位操作符的兩個操作數(shù)必須是整型的。整個移位表達式的值的類型也是整型的,而且,左移位操作符與右移位操作符的運算并不對稱。
    2020-07-07
  • 詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧
    2018-10-10
  • C++泛型編程基本概念詳解

    C++泛型編程基本概念詳解

    這一篇介紹一下 C++ 編程中與面向?qū)ο蟛⒘械牧硪淮蠓种А盒途幊?,這一篇主要介紹函數(shù)模板、類模板和成員模板三大部分,需要的朋友可以參考下
    2021-08-08
  • C++回溯算法中子集問題分析探討

    C++回溯算法中子集問題分析探討

    回溯法是一種選優(yōu)搜索法,按選優(yōu)條件向前搜索,以達到目標。但當探索到某一步時,發(fā)現(xiàn)原先選擇并不優(yōu)或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術(shù)為回溯法,而滿足回溯條件的某個狀態(tài)的點稱為回溯點
    2023-03-03

最新評論

东光县| 灌南县| 肃南| 原阳县| 紫金县| 万年县| 浮梁县| 铁岭县| 交城县| 泸定县| 伊金霍洛旗| 壤塘县| 桐庐县| 剑川县| 丰镇市| 宝清县| 马龙县| 页游| 增城市| 尚义县| 耿马| 土默特右旗| 郴州市| 阿坝| 松阳县| 平乐县| 涟源市| 嫩江县| 绥滨县| 且末县| 隆子县| 沈丘县| 桑日县| 温州市| 开阳县| 涪陵区| 博兴县| 天台县| 揭东县| 新民市| 凌云县|