Re: [問題]問個c語言問題

看板Electronics作者 (everlasting)時間19年前 (2007/02/26 00:48), 編輯推噓2(203)
留言5則, 1人參與, 最新討論串7/7 (看更多)
※ 引述《zxvc (zxvc)》之銘言: : 我剛才查了一下C的規格書--ISO 9899:1999。 : 如果我沒會錯意的話: : 『""』包起來的東西是一個array of character type, : 它會傳給lvalue一個address(也就是它的rvalue), : 所以一般來說"\0"不等於0。 本來就不等於0 ""代表的就是char*的型別 "\0"代表的就是指向一個內容為0的記憶體空間指標 : 可以用這個程式碼來測試把"\0"傳回的東西當作指標運算,應該會印出0: : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : #include <stdio.h> : int main() : { : int a = (int) "\0"; : char c = *((char *) a); : printf("%d", c); : return 0; : } : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : 換言之使用『""』建立字串時,程式會先在記憶體中配製一塊空間給該字串(字元陣列)。 : 並把第一個字元的位址傳給lvalue。 : (以上部份是我參考規格書的想法,如有會錯意請見諒,我不是C語言高手。) 就是放在所謂的heap裡面 跟stack是分開的空間 有寫過組語的話這邊就會有很深刻的了解了XD : 而'\0'應該為0,雖然我在C規格書查不到。不過可以測試這個程式碼: : if('\0' == 0) printf("Yes.\n"); 實際上不應該會有'\0'這種東西的 因為''代表的型別就是數值 實在是不需要繞了一大圈去assign數值 我試過的VC裡面打'\1'就會爆掉了 所以\0可能是compiler特別弄出來的@@ : 另外我還查到規格書說『false』會被macro expands to 0, : 『false』被定義在stdbool.h裡面。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.197.139

02/26 01:45, , 1F
'\1' 確實是等於 1 ...
02/26 01:45, 1F

02/26 01:45, , 2F

02/26 01:45, , 3F
請看 Numeric Escape Squences...
02/26 01:45, 3F

02/26 01:54, , 4F
會爆掉可能你寫法有誤或是VC有問題...VC問題很多的
02/26 01:54, 4F

02/26 01:54, , 5F
要裝 SPn 才會正常一點...
02/26 01:54, 5F
文章代碼(AID): #15uRtSOT (Electronics)
討論串 (同標題文章)
文章代碼(AID): #15uRtSOT (Electronics)