iT邦幫忙

DAY 11
7

C++ 指標 30日系列 第 11

C++ 指標 30日(11)

指標就在前方不遠處...


今日主題:const 指標

const用意是常數,一旦定義之後即不能再改變,若將指標與const共用時應注意此點。

請看程式碼:

#include <stdio.h>

main()
{
   int x=100, y=200;
   int * const ptr = &x;
   
   *ptr = 200;
   
   printf("%d\n", *ptr);
   // 結果:200,可更改常數指標所指到的值
   // 但不可更改常數ptr指標本身,例如:ptr=&y則會產生錯誤
}

鐵人文總整理


上一篇
C++ 指標 30日(10)
下一篇
C++ 指標 30日(12)
系列文
C++ 指標 30日26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
鐵殼心
iT邦高手 1 級 ‧ 2013-09-26 13:19:16

拍手

總裁 iT邦好手 1 級 ‧ 2013-09-26 13:21:35 檢舉

再來個void 指標好了....讚

0
海綿寶寶
iT邦大神 1 級 ‧ 2013-09-26 13:55:17

但不可更改常數ptr指標本身,例如:ptr=&y則會產生錯誤

const 不可以
那可不可以

&lt;pre class="c" name="code">
&x = &y;


疑惑

看更多先前的回應...收起先前的回應...
ted99tw iT邦高手 1 級 ‧ 2013-09-26 15:36:45 檢舉

"&x = &y;"
"&x = 0x7fff364f9e58;"

這種寫法是不行的,因為在編譯期,系統即配置一個固定位址給x,此位址在執行期不能改變,但該位址內要存100或200則可改變。(此例是透過*ptr改之)謝謝

所以

&lt;pre class="c" name="code">
int x=100;

沒有加 const 也是不可以改位址

越來越混淆了
暈

總裁 iT邦好手 1 級 ‧ 2013-09-26 17:04:27 檢舉

不會呀,因為&X根本就不能放在等號左邊...暈

cdfu提到:
&X根本就不能放在等號左邊

簡單明瞭,今天又學到了一點
謝謝

ted99tw iT邦高手 1 級 ‧ 2013-09-26 20:37:12 檢舉

真他X的簡單明瞭,今天又學到了一點
謝謝

0
krarm
iT邦好手 1 級 ‧ 2013-09-26 16:02:48

沒有講到以下三者的不同:

int * const ptr = &x;
const int * ptr = &x;
const int * const ptr = &x;

ted99tw iT邦高手 1 級 ‧ 2013-09-26 20:36:35 檢舉

敲碗

ted99tw iT邦高手 1 級 ‧ 2013-09-28 16:46:17 檢舉

謝謝卡大補充,那就繼續說明一下:

下了石化咒const,該變數就不能再被改變。若改變,則編譯期會報錯。

問題是const的被施咒對象為何?

&lt;pre class="c" name="code">
int * const ptr = &x;

被施咒對象是ptr,所以ptr++會報錯

&lt;pre class="c" name="code">
const int * ptr = &x;

被施咒對象是ptr指到的int,所以*ptr = 101會報錯

&lt;pre class="c" name="code">
const int * const ptr = &x;

被施咒對象同時是兩者,所以以上寫法皆會報錯
謝謝

我要留言

立即登入留言