亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

const int *,const int * const和int const *之間有什么區別?

const int *,const int * const和int const *之間有什么區別?

鴻蒙傳說 2019-05-25 15:51:57
const int *,const int * const和int const *之間有什么區別?我總是搞砸了怎么用const int*,const int * const和int const *正確的。是否有一套規則定義了您能做什么和不能做什么?我想知道在任務,傳遞到職能等方面所做的所有事情和所有不應做的事情。
查看完整描述

4 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

向后讀(由順時針/螺旋規則驅動):

  • int* - 指向int的指針

  • int const * - 指向const int的指針

  • int * const - const指向int的指針

  • int const * const - const指向const int的指針

現在第一個const可以在類型的任何一側,所以:

  • const int * == int const *

  • const int * const == int const * const

如果你想變得非常瘋狂,你可以做這樣的事情:

  • int ** - 指向int的指針

  • int ** const - 指向int的指針的const指針

  • int * const * - 指向int的const指針的指針

  • int const ** - 指向const int指針的指針

  • int * const * const - 指向int的const指針的const指針

  • ...

并確保我們清楚const的含義

const int* foo;int *const bar; //note, you actually need to set the pointer 
                //here because you can't change it later ;)

foo是一個指向常量整數的變量指針。這使您可以更改指向的內容,但不能更改指向的值。大多數情況下會看到C風格的字符串,其中有一個指向a的指針const char。您可以更改指向的字符串,但不能更改這些字符串的內容。當字符串本身位于程序的數據段中且不應更改時,這很重要。

bar是一個指向可以更改的值的常量或固定指針。這就像沒有額外語法糖的參考。因為這個事實,通常你會使用一個你將使用T* const指針的引用,除非你需要允許NULL指針。


查看完整回答
反對 回復 2019-05-25
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

我想這里已經回答了所有問題,但我只想補充一點,你應該小心typedefs!它們不僅僅是文本替換。

例如:

typedef char *ASTRING;const ASTRING astring;

類型astringchar * const,而不是const char *。這是我總是傾向于放在const類型右側的一個原因,而不是從一開始。


查看完整回答
反對 回復 2019-05-25
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

幾乎所有人都指出:

有什么區別const X* pX* const pconst X* const p

你必須從右到左閱讀指針聲明。

  • const X* p 表示“p指向一個常數為X的X”:不能通過p更改X對象。

  • X* const p 表示“p是指向非const的X的const指針”:您不能更改指針p本身,但可以通過p更改X對象。

  • const X* const p 表示“p是指向X的常量指針”:您不能更改指針p本身,也不能通過p更改X對象。


查看完整回答
反對 回復 2019-05-25
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

  1. 常量參考:

    對變量(此處為int)的引用,它是常量。我們主要將變量作為引用傳遞,因為引用的大小小于實際值,但是存在副作用,這是因為它就像實際變量的別名。我們可能會通過完全訪問別名來意外更改主變量,因此我們將其設置為常量以防止此副作用。

    int var0 = 0;const int &ptr1 = var0;ptr1 = 8; // Errorvar0 = 6; // OK
  2. 常量指針

    一旦常量指針指向變量,它就不能指向任何其他變量。

    int var1 = 1;int var2 = 0;int *const ptr2 = &var1;ptr2 = &var2; // Error
  3. 指向常數的指針

    一個指針,通過它可以不改變它指向的變量的值,這個指針稱為指向常量的指針。

    int const * ptr3 = &var2;*ptr3 = 4; // Error
  4. 指向常量的常量指針

    指向常量的常量指針是一個指針,既不能改變它指向的地址,也不能改變保存在該地址的值。

    int var3 = 0;int var4 = 0;const int * const ptr4 = &var3;*ptr4 = 1;     // Error
     ptr4 = &var4; // Error


查看完整回答
反對 回復 2019-05-25
  • 4 回答
  • 0 關注
  • 1562 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號