成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Const 左邊還是右邊?破解C++中最讓人抓狂的關鍵字

開發
今天咱們用最通俗的語言,把const int* p和int* const p這兩個"魔鬼"般的關鍵字徹底搞清楚!

大家好啊!我是小康。

今天咱們來聊一個讓無數程序員頭疼的話題 —— C++中的 const 關鍵字。不知道你有沒有過這種經歷:剛開始學C++的時候,看到const int* p和int* const p這兩個東西,腦袋瞬間就懵了?"這兩個到底有啥區別啊?const 放左邊放右邊,不都一樣嗎?"

如果你也有這困惑,那今天這篇文章就是專門為你準備的!咱們用最通俗的語言,把這個"魔鬼"般的關鍵字徹底搞清楚!

一、先別急著背口訣,理解才是王道

網上有很多口訣,什么"靠誰近就修飾誰",但很多人背了半天還是摸不著頭腦。今天我不想讓你背口訣,我要你真正理解為什么會這樣。

讓我們把這個問題想象成現實生活中的一個情景:

const就像是一把鎖??,它鎖住的東西就不能改變了。

二、const的兩種基本用法

1. 鎖住普通變量 - 最簡單的const

const int age = 18;
age = 19;  // 錯誤!age被const鎖住了,不能改變

這種情況很好理解吧?就是告訴編譯器:"嘿,這個變量不能變,死鎖定在這個值了!"

2. 指針世界的const - 這才是重頭戲

在指針世界里,const就變得有趣了,因為指針本身有兩層含義:

  • 指針變量本身(它存的是一個地址)
  • 指針指向的內容(通過這個地址能找到的值)

所以 const 可以鎖兩種東西:

  • 鎖住指針本身,使它不能指向其他地方
  • 鎖住指針指向的內容,使內容不能被修改

現在問題就變得清晰了!

三、const在左在右,差別大了去了!

情況一:const int* p 或 int const* p(兩種寫法等價)

這種情況下,const鎖的是指針指向的內容(即*p)。

int num = 10;
const int* p = #  // 或者寫成 int const* p = #

*p = 20;  // 錯誤!不能通過p修改它指向的內容
p = &other_num;  // 正確!p本身可以改變,指向別的地方

我們可以這樣記:const和int(類型)挨著,鎖定的就是內容。

想象成:"你可以換手機(p可以變),但不能修改里面的通訊錄(*p不能變)"。

情況二:int* const p

這種情況下,const鎖的是指針變量本身(p)。

int num = 10;
int other_num = 20;
int* const p = #

*p = 30;  // 正確!可以通過p修改它指向的內容
p = &other_num;  // 錯誤!p本身被鎖住了,不能指向別處

這里可以記作:const和變量名挨著,鎖定的就是指針本身。

想象成:"你不能換手機(p不能變),但可以修改里面的通訊錄(*p可以變)。"

情況三:const int* const p

這是終極形態,兩個 const 都有,指針和內容都被鎖住了!

int num = 10;
const int* const p = #

*p = 20;  // 錯誤!
p = &other_num;  // 錯誤!

想象成:"你不能換手機,也不能修改里面的通訊錄,只能看看而已。"

四、實用小技巧:從右往左讀

如果你還是覺得復雜,有一個小技巧:從右往左讀聲明。

  • const int* p → p是一個指針,指向 const int
  • int* const p → p是一個 const 指針,指向 int
  • const int* const p → p是一個 const 指針,指向 const int

五、真實案例:const在函數參數中的應用

為什么要用const?不僅僅是為了折磨你,它確實有重要作用。

防止函數內部修改外部數據:

// 不安全的函數,可能修改你的數據
void process(int* data) {
    *data = 0;  // 哎呀,你的數據被我改了
}

// 安全的函數,保證不會修改你的數據
void safeProcess(const int* data) {
    *data = 0;  // 編譯錯誤!這樣就防止了意外修改
}

傳引用時提高效率又保證安全:

// 這是最常見的const用法
void printBigObject(const BigObject& obj) {
    // 通過引用避免了復制大對象(提高效率)
    // 通過const確保函數不會修改對象(保證安全)
    cout << obj.toString() << endl;
}

六、真相了:const其實很友好

學會了const,你會發現它其實是 C++ 設計中很貼心的一部分:

  • 幫你避免意外修改不該修改的數據
  • 讓代碼更清晰,表達"這個東西不應該被修改"的意圖
  • 編譯器可以做更多優化

七、小結:const記憶口訣

如果你看了前面的解釋還是覺得繞,那就記住這一句話:

const和誰在一起(挨著誰),就鎖定誰

  • const int* p:const和int(類型)挨著,鎖定的是內容
  • int* const p:const和p挨著,鎖定的是指針本身

看到沒?就這么簡單!

啥?你說還有int const* p這種寫法?這個其實等價于const int* p,因為 const 和 * 都挨著,不管 const 在前還是在后,都是修飾 * 的。

好了,const這個"攔路虎"就這樣被我們輕松拿下了!是不是感覺豁然開朗?快去試試吧!

責任編輯:趙寧寧 來源: 跟著小康學編程
相關推薦

2013-09-12 15:39:30

編程語言BANCStar

2024-02-23 18:04:37

C++const關鍵字

2021-07-28 06:53:02

C++Const指針傳遞

2010-01-26 14:35:11

C++關鍵字

2024-08-06 16:28:57

2024-08-16 09:06:03

2023-11-19 22:52:42

2011-05-17 13:04:20

Cconst

2016-01-04 17:53:27

創始人2015失利

2011-07-14 23:14:42

C++static

2015-11-10 16:10:22

C語言StaticConst

2010-02-25 11:02:29

JavaScript

2010-02-01 14:46:53

C++關鍵字

2011-04-11 15:06:22

C++關鍵字

2024-03-15 11:52:03

C++關鍵字編程

2010-02-02 14:27:54

C++ static關

2010-02-05 15:51:06

C++ explici

2020-05-25 14:17:49

碼農編程語言GitHub

2011-04-21 16:57:56

staticextern

2024-01-15 10:41:31

C++關鍵字開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久aⅴ乱码一区二区三区 91综合网 | 欧产日产国产精品视频 | 免费久草| 中文字幕av在线播放 | 色综合99| 一区二区三区免费网站 | 亚洲福利在线视频 | 综合激情网 | 日韩欧美综合 | 久久久久久久久淑女av国产精品 | 精品国产一区三区 | 日韩av一二三区 | 国产精品性做久久久久久 | 亚洲欧美国产一区二区三区 | 一级黄色毛片免费 | 超碰在线免费av | 手机在线一区二区三区 | 91精品国产乱码久久蜜臀 | 美女视频一区二区 | 中文字幕成人 | 一区二区三区中文 | 超碰人人人 | 国产精品国产三级国产aⅴ原创 | 久久久久久久一区二区三区 | 福利视频一区二区 | 视频在线一区二区 | 国产成人精品999在线观看 | 奇米久久久 | www久久爱 | 亚洲免费网站 | 国产精品亚洲精品日韩已方 | 国产精品久久国产精品久久 | 久久综合影院 | 日韩精品在线播放 | 亚洲国产福利视频 | 国产高清不卡 | 黑人巨大精品欧美黑白配亚洲 | 精品国产一区二区三区久久久蜜月 | 中文字幕 国产 | 请别相信他免费喜剧电影在线观看 | 欧美精品一区二区三区在线四季 |