作者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
1F:推 TroyLee:'\1' 确实是等於 1 ... 02/26 01:45
3F:→ TroyLee:请看 Numeric Escape Squences... 02/26 01:45
4F:推 TroyLee:会爆掉可能你写法有误或是VC有问题...VC问题很多的 02/26 01:54
5F:→ TroyLee:要装 SPn 才会正常一点... 02/26 01:54