Re: [問題] 指標問題

看板C_and_CPP (C/C++)作者 (下班後才下棋)時間14年前 (2009/11/15 23:17), 編輯推噓5(5016)
留言21則, 3人參與, 最新討論串4/13 (看更多)
※ 引述《iamyu58 (我是誰)》之銘言: : 我想問一個指標的問題 : 下面是我打的程式碼(我是新手 請見諒) : #include<stdio.h> : int main() : { : int *ptr=0; : printf("ptr:%d\n",*ptr); : printf("ptr+1:%d\n",(*ptr)+1); : printf("ptr+2:%d\n",(*ptr)+2); : return 0; : } : 為什麼執行結果會有錯? : 我原本預期的是 : ptr:0 : ptr+1:1 : ptr+2:2 : 請大家幫我解惑 謝謝 *ptr 是提取以 ptr 所指向之位址所存的值 但是 int *ptr = 0; 因此 ptr 並沒有指向任何東西 如果想要知道此時 ptr 所指向何處 應該使用 printf 的 pointer format : %p printf("ptr: %p\n", ptr); // 注意此處是傳 ptr 本身 printf("ptr+1: %p\n", ptr+1); printf("ptr+2: %p\n", ptr+2); 以此類推 -- 有時候,遺忘,是令人快樂的。什麼時候?當然是有人傷了你的心的時候。  存心傷你的那個人,固然是故意和你過不去,但是被傷了心而耿耿於懷的你  ,卻是和自己過不去了。所以,記性不好的人,通常會是比較快樂的人,也  是比較不容易被擊倒的人。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.50

11/16 00:35, , 1F
int *ptr = 0; //ptr應該是就指向0這個位址吧....@_@"
11/16 00:35, 1F

11/16 00:51, , 2F
根據語言的規範 當你把integral constant expression
11/16 00:51, 2F

11/16 00:51, , 3F
with the value 0 assign給一個pointer,就會是一個null
11/16 00:51, 3F

11/16 00:51, , 4F
pointer(不指向任何東西的pointer)
11/16 00:51, 4F

11/16 00:52, , 5F
要注意的是 這和「null pointer的context必定是所有的
11/16 00:52, 5F

11/16 00:53, , 6F
bit都等於零」是兩件事....這聽起來有點複雜
11/16 00:53, 6F

11/16 00:53, , 7F
簡單的說 就算某些系統上以non-zero value來代表null
11/16 00:53, 7F

11/16 00:53, , 8F
pointer(這是有可能發生的) 但是根據語言規範,當你把
11/16 00:53, 8F

11/16 00:54, , 9F
一個其值為0的constant expression給一個pointer的時侯
11/16 00:54, 9F

11/16 00:54, , 10F
即使該系統上的null pointer不是以零表示,編譯器還是應
11/16 00:54, 10F

11/16 00:54, , 11F
該把那個pointer設為null pointer,因為這是語言規範
11/16 00:54, 11F

11/16 00:55, , 12F
以上說的都是C語言
11/16 00:55, 12F

11/16 01:13, , 13F
原來如此, 小弟受教了<(_ _)> 看起來這與實務無關, 而是
11/16 01:13, 13F

11/16 01:14, , 14F
定義層級的東西了....@_@"
11/16 01:14, 14F

11/16 01:19, , 15F
只有一個陷阱 是你把其值為0的變數assign給pointer,或
11/16 01:19, 15F

11/16 01:19, , 16F
強制轉型成pointer時,它有可能不被當成null pointer
11/16 01:19, 16F

11/16 01:19, , 17F
不過..基本上所有主流系統null pointer都是0啦XD
11/16 01:19, 17F

11/16 10:04, , 18F
看板長智慧... 我只知道語意上沒指向東西, 不知道原來 null
11/16 10:04, 18F

11/16 10:04, , 19F
pointer 也可能有不同的值.... m(_ _)m
11/16 10:04, 19F

11/16 10:28, , 20F
小弟我本來還不知道語意上是沒指向東西呢....Orz
11/16 10:28, 20F

11/16 10:29, , 21F
因為dereference下去看起來都是Mem Access Violation XD
11/16 10:29, 21F
文章代碼(AID): #1B01kcYl (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
4
13
完整討論串 (本文為第 4 之 13 篇):
1
1
4
13
5
21
13
58
5
39
1
28
1
9
文章代碼(AID): #1B01kcYl (C_and_CPP)