如果在字符常量中要表示双引号"和问号?,既可以使用转义序列\"和\?,也可以直接用字符"和?,而要表示'和\则必须使用转义序列。 这句把单引号和双引号弄反了。
谢谢您的建议。不过我好像没明白您的意思。这句话哪里反了呢?我的意思是说可以 '\"' '\?' 也可以 '"' '?' 但要表示'和\则必须 '\'' '\\'
关于转义序列和占位符,感觉还是直接用编译时和运行时的概念解释比较容易理解。
自己做了一个小实验,在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
不好意思,关于上面程序中的语句
printf("abc%dabc\nabc",5);
应该为
printf("abc%cabc\nabc",5);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
是strings程序的输出有问题,用UltraEdit看的是对的
宋老师: 建议在介绍字符常量时,介绍一下两个单'号中间有多个字符的情况,代表什么意思,占用多大空间内存等。如: 'A' 字符常量A,占用一个字符内存 'AB','ABCD',这些又表示什么意思呢?各占用多大内存呢?
无语了。答案在书上写得很清楚,自己再看看吧。
脚注2,根本不对, “读者可能会奇怪,为什么需要规定一个转义序列\?呢?因为C语言规定了一些三连符(Trigraph),......” 转义是因为有些字符不能“显式”输入,如换行、退格之类,或者与语言某些保留字符如',"冲突,这是定义转义字符的原因。 而Trigraph是因为某些机器没法输入一些字符,如#之类。 这根本两回事,不相关,没有因果关系。
这是我没说清楚还是你没理解到位呢? 既然三连符都是??开头,那么?号就是一个特殊字符,属于你说的“与语言某些保留字符如',"冲突”,所以是因果关系的。
宋老师:
你好,这一节中,我看到电子书上有一句如下
在C语言中是两种不同的类型(Type),例如上例的34和3.14,小数在计算机术语中成为浮点数。
这一句能否将3.14上的逗号改为分号,因为如果是逗号的话,好像容易引起理解上的偏差。嗯,你说得对,谢谢指出!
宋老师,浮点数输出%f默认是六位小数,实例给的只是两位
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!