作者invalid (everlasting)
站內Electronics
標題Re: [問題]問個c語言問題
時間Mon Feb 26 00:48:27 2007
※ 引述《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
推 TroyLee:'\1' 確實是等於 1 ... 02/26 01:45
→ TroyLee:請看 Numeric Escape Squences... 02/26 01:45
推 TroyLee:會爆掉可能你寫法有誤或是VC有問題...VC問題很多的 02/26 01:54
→ TroyLee:要裝 SPn 才會正常一點... 02/26 01:54