推 VictorTom:int *ptr = 0; //ptr應該是就指向0這個位址吧....@_@" 11/16 00:35
推 holymars:根據語言的規範 當你把integral constant expression 11/16 00:51
→ holymars:with the value 0 assign給一個pointer,就會是一個null 11/16 00:51
→ holymars:pointer(不指向任何東西的pointer) 11/16 00:51
→ holymars:要注意的是 這和「null pointer的context必定是所有的 11/16 00:52
→ holymars:bit都等於零」是兩件事....這聽起來有點複雜 11/16 00:53
→ holymars:簡單的說 就算某些系統上以non-zero value來代表null 11/16 00:53
→ holymars:pointer(這是有可能發生的) 但是根據語言規範,當你把 11/16 00:53
→ holymars:一個其值為0的constant expression給一個pointer的時侯 11/16 00:54
→ holymars:即使該系統上的null pointer不是以零表示,編譯器還是應 11/16 00:54
→ holymars:該把那個pointer設為null pointer,因為這是語言規範 11/16 00:54
→ holymars:以上說的都是C語言 11/16 00:55
推 VictorTom:原來如此, 小弟受教了<(_ _)> 看起來這與實務無關, 而是 11/16 01:13
→ VictorTom:定義層級的東西了....@_@" 11/16 01:14
推 holymars:只有一個陷阱 是你把其值為0的變數assign給pointer,或 11/16 01:19
→ holymars:強制轉型成pointer時,它有可能不被當成null pointer 11/16 01:19
→ holymars:不過..基本上所有主流系統null pointer都是0啦XD 11/16 01:19
→ ledia:看板長智慧... 我只知道語意上沒指向東西, 不知道原來 null 11/16 10:04
→ ledia:pointer 也可能有不同的值.... m(_ _)m 11/16 10:04
推 VictorTom:小弟我本來還不知道語意上是沒指向東西呢....Orz 11/16 10:28
→ VictorTom:因為dereference下去看起來都是Mem Access Violation XD 11/16 10:29