>第 2 章 常量、变量和表达式>常量

ddd ddd@clf.net
2008-12-03 19:50:25

如果在字符常量中要表示双引号"和问号?,既可以使用转义序列\"和\?,也可以直接用字符"和?,而要表示'和\则必须使用转义序列。

这句把单引号和双引号弄反了。


宋劲杉 songjinshan@akaedu.org
2008-12-07 15:56:52

谢谢您的建议。不过我好像没明白您的意思。这句话哪里反了呢?我的意思是说可以
'\"'
'\?'
也可以
'"'
'?'
但要表示'和\则必须
'\''
'\\'


侯延祥 houyx2008@163.com
2009-04-15 11:04:48

关于转义序列和占位符,感觉还是直接用编译时和运行时的概念解释比较容易理解。
自己做了一个小实验,在windows下用MinGW做的,有一些问题:
程序如下:
#include <stdio.h>
int main(void)
{
    printf("abc%dabc\nabc",5);
}
编译出来之后用UltraEdit打开可以看到字符串如下(0x)
61 62 63 25 64 61 62 63 0a 61 62 63
这个可以和程序对应上,但是用Strings读出来的却不对,少最后的abc,如下:
D:\MiniTools\MinGW\bin>strings a.exe
$40@
[^_]
AAAA
AAAA
AAAA
AAAA
AAAA
AAAA
AAAA
AAAA
[^_]
abc%cabc
-LIBGCCW32-EH-3-SJLJ-GTHR-MINGW32
w32_sharedptr->size == sizeof(W32_EH_SHARED)
../../gcc-3.4.5/gcc/config/i386/w32-shared-ptr.c
GetAtomNameA (atom, s, sizeof(s)) != 0
AddAtomA
ExitProcess
FindAtomA
GetAtomNameA
SetUnhandledExceptionFilter
__getmainargs
__p__environ
__p__fmode
__set_app_type
_assert
_cexit
_iob
_onexit
_setmode
abort
atexit
free
malloc
memset
printf
signal
KERNEL32.dll
msvcrt.dll




侯延祥 houyx2008@163.com
2009-04-15 11:06:34

不好意思,关于上面程序中的语句
printf("abc%dabc\nabc",5);
应该为
printf("abc%cabc\nabc",5);


侯延祥 houyx2008@163.com
2009-04-15 11:11:15

UltraEdit中的显示(0x)
61 62 63 25 64 61 62 63 0a 61 62 63
也应该为
61 62 63 25 63 61 62 63 0a 61 62 63


宋劲杉 songjinshan@akaedu.org
2009-04-16 08:27:06

是strings程序的输出有问题,用UltraEdit看的是对的


杨超 chao1016@qq.com
2009-11-28 15:26:24

宋老师:
  建议在介绍字符常量时,介绍一下两个单'号中间有多个字符的情况,代表什么意思,占用多大空间内存等。如:
'A' 字符常量A,占用一个字符内存
'AB','ABCD',这些又表示什么意思呢?各占用多大内存呢?


宋劲杉 songjinshan@akaedu.org
2009-12-27 15:29:34

无语了。答案在书上写得很清楚,自己再看看吧。


Anonymouse Anony@mouse.com
2010-01-14 16:44:28

脚注2,根本不对,
“读者可能会奇怪,为什么需要规定一个转义序列\?呢?因为C语言规定了一些三连符(Trigraph),......”

转义是因为有些字符不能“显式”输入,如换行、退格之类,或者与语言某些保留字符如',"冲突,这是定义转义字符的原因。
而Trigraph是因为某些机器没法输入一些字符,如#之类。
这根本两回事,不相关,没有因果关系。


宋劲杉 songjinshan@akaedu.org
2010-01-21 15:03:12

这是我没说清楚还是你没理解到位呢?
既然三连符都是??开头,那么?号就是一个特殊字符,属于你说的“与语言某些保留字符如',"冲突”,所以是因果关系的。


李林 lilinly225@163.com
2010-12-31 21:14:44

宋老师:
    你好,这一节中,我看到电子书上有一句如下
 在C语言中是两种不同的类型(Type),例如上例的34和3.14,小数在计算机术语中成为浮点数。

这一句能否将3.14上的逗号改为分号,因为如果是逗号的话,好像容易引起理解上的偏差。


宋劲杉 songjinshan@gmail.com
2011-01-01 17:39:36

嗯,你说得对,谢谢指出!


李伟 lw841166515@gmail.com
2011-09-29 15:50:11

宋老师,浮点数输出%f默认是六位小数,实例给的只是两位


如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!