欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中常量與指針的示例詳解

 更新時間:2021年06月27日 14:06:46   作者:Just for Life.  
在C++學(xué)習(xí)使用過程中,每個人都不可避免地使用指針,而且都或多或少的接觸過常量指針或指針常量,但是對這兩個的概念還是很容易搞糊涂的,所以這篇文章主要給大家介紹了關(guān)于C++中常量與指針的相關(guān)資料,需要的朋友可以參考下

前言

和指針聯(lián)用有佷微妙的地方,之前一直佷暈,現(xiàn)在來繼續(xù)研究下。諸如以下:

int const;
const int;
const int* p;
int const* p;
int* const p;
const int* const p;

const 是一種處理符號常量的方法,以 const 聲明的變量,一般首字母大寫,聲明之后無法被修改。相比于 define,const 會顯式的指定類型。除定義符號外,一般可用于函數(shù)聲明,表示函數(shù)不會修改任何值;用于參數(shù),表示函數(shù)不會修改參數(shù);甚至可以用于聲明數(shù)組的長度。

解讀

const默認作用于其左邊的東西。左邊沒東西的情況下,作用于其右邊的東西。1

  1. const int* p,只有右邊有東西,修飾的為 int,所以數(shù)值不能被修改。在與 * 結(jié)合,意思是*p不能被修改,其它的都可以。即不可通過該指針改變其指向的內(nèi)容,但可改變指針本身所指向的地址。
  2. int const* p,先作用于左側(cè)的 int 為 int const,在疊加上右側(cè)的 *,所以修飾的為 int* p,所以,*p不能被修改,其它的都可以。即不可通過該指針改變其指向的內(nèi)容,但可改變指針本身所指向的地址。也就是,和上面的是一樣的。
  3. int* const p,左邊是 *,所以 const 作用于指針,指向一個 int 變量。即不可以修改 p,但可以修改 *p,即不可改變指向的地址。
  4. const int* const p,對于第一個 const,左邊沒東西,修飾右邊的 int,指向的值不能修改;對于第二個 const 修飾 *,指針不能修改。即不可改變指針本身所指向的地址,也不可通過指針改變其指向的內(nèi)容。同 int const* const p。
  5. int const* const* p,第一個 const 修飾 int,第二個 const 修飾第一個 *,也就是,指向 const int* const p 的指針,最后一個 * 沒有被修飾,因此可以指向其它變量。int const* const* const 就不可以了。
  6. 之后再出現(xiàn)此類情況,也可以慢慢分析滿天飛的 const 和指針。

一些例子

為了更好的理解上述內(nèi)容,這里來舉一些例子。常見的一般有兩種選擇:

  • 常指針指向一個變量,防止修改指針修改變量值
  • 常指針指向一個常量
  • 非常指針指向常量(錯誤)

先看第一種情況:解引用只是取出指向內(nèi)存區(qū)域的值,因此指向內(nèi)存區(qū)域的值是可以直接修改的,但不能通過指針修改。

int main (){
    int a{34};
    const int *p = &a;
    // *p 為 const,不能被修改
    // 錯誤
    // *p ++;
    // p 指向的不是常量,因此,可以修改 a
    a ++;
    std::cout << *p << std::endl;
    
    int b{12};
    p = &b;
    std::cout << *p << std::endl;
    return 0;
}

對于第二種情況:不能修改變量,也不能修改常量。

int main (){

    const int a{34};
    // *p 為 const,不能被修改,a 也不能被修改
    const int *p = &a;
    std::cout << *p << std::endl;

    int b{12};
    p = &b;
    std::cout << *p << std::endl;

    return 0;
}

對于第三種情況:修改指針來修改常量會顯得佷荒謬,因此編譯會直接報錯:

int main (){
    const int a{34};
    // error: invalid conversion from 'const int*' to 'int*'
    int *p = &a;
    *p ++;
    std::cout << *p ;
    return 0;
}

二級指針

之前說到,常指針可以指向變量,但是涉及二級指針后,情況又會發(fā)生逆轉(zhuǎn)。

int main (){

    const int a{12};
    const int** p1;
    int* p2;

    // error: invalid conversion from 'int**' to 'const int**'
    p1 = &p2;
    *p1 = &a;

    *p2 = 10;

    return 0;
}

如果上述代碼通過,那么完全可以通過 p2 指針修改常量。因此我們可以得到以下結(jié)論:

若數(shù)據(jù)類型本身不是指針,可以將 const 數(shù)據(jù)或非 const 數(shù)據(jù)的地址賦給指向 const 的指針,但指針可以修改,指向別的值。因此,const 修飾的數(shù)組不能傳參給非常量指針。

如果數(shù)據(jù)類型是指針,非 const 數(shù)據(jù)的地址只能賦值給非 const 指針,如二級指針中,p1 = &p2 是錯誤的。

總結(jié)

到此這篇關(guān)于C++中常量與指針的文章就介紹到這了,更多相關(guān)C++常量與指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

references

1.https://www.zhihu.com/question/443195492 ↩

相關(guān)文章

  • C語言實現(xiàn)計算器的兩種方法

    C語言實現(xiàn)計算器的兩種方法

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)計算器的兩種方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C/C++ 函數(shù)原理傳參示例詳解

    C/C++ 函數(shù)原理傳參示例詳解

    這篇文章主要為大家介紹了C/C++ 函數(shù)原理傳參示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • C語言實現(xiàn)會員計費系統(tǒng)

    C語言實現(xiàn)會員計費系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)會員計費系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++實現(xiàn)“隱藏實現(xiàn),開放接口”的方案

    C++實現(xiàn)“隱藏實現(xiàn),開放接口”的方案

    本文從一個實例講解了C++實現(xiàn)“隱藏實現(xiàn),開放接口”的方案,文章條理清新,內(nèi)容充實,需要的朋友可以參考下
    2015-07-07
  • Clion-MinGW編譯后的exe文件添加ico圖標的操作方法

    Clion-MinGW編譯后的exe文件添加ico圖標的操作方法

    這篇文章主要介紹了Clion-MinGW編譯后的exe文件添加ico圖標的操作方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C/C++仿華容道小游戲

    C/C++仿華容道小游戲

    這篇文章主要介紹了C/C++仿華容道小游戲的相關(guān)資料,模仿實現(xiàn)華容道游戲,感興趣的朋友可以參考一下
    2016-02-02
  • C語言實現(xiàn)跨文件傳輸數(shù)據(jù)的幾種方式

    C語言實現(xiàn)跨文件傳輸數(shù)據(jù)的幾種方式

    C語言是一種強大的、通用的編程語言,常用于系統(tǒng)級編程,包括硬件交互,如中斷處理和數(shù)據(jù)采集,在本文中,我們將深入探討如何使用C語言進行跨文件數(shù)據(jù)傳輸,文中有相關(guān)的代碼供大家參考,需要的朋友可以參考下
    2024-08-08
  • c++截取漢字和英文混合字符串代碼實例

    c++截取漢字和英文混合字符串代碼實例

    這篇文章主要介紹了c++截取漢字英文混合字符串,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • QT實戰(zhàn)之打開最近圖片功能的實現(xiàn)

    QT實戰(zhàn)之打開最近圖片功能的實現(xiàn)

    這篇文章主要為大家詳細介紹了如何利用Qt和QSettings實現(xiàn)打開最近圖片功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)QT有一定的幫助,感興趣的可以了解一下
    2022-06-06
  • C++ 簡單的任務(wù)隊列詳解

    C++ 簡單的任務(wù)隊列詳解

    下面小編就為大家?guī)硪黄狢++ 簡單的任務(wù)隊列詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12

最新評論