Re: [問題]問個c語言問題
※ 引述《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
02/26 01:45, 1F
→
02/26 01:45, , 2F
02/26 01:45, 2F
→
02/26 01:45, , 3F
02/26 01:45, 3F
推
02/26 01:54, , 4F
02/26 01:54, 4F
→
02/26 01:54, , 5F
02/26 01:54, 5F
討論串 (同標題文章)