单引号和双引号在C中的意义完全不同,包围在单引号中的一个字符知识编写整数的另一种方法。这个整数是给定的字符在实现的对照序列中的一个对应的值。因此在一个ASCII实现中,‘a’和0141或97表示完全相同的东西,而在一个包围在双引号中的字符串,只是编写一个有双引号之间的字符和一个附加的二进制为零的字符所初始化的一个无名数组的指针的一种简短方法。
使用一个指针来代替一个整数通常会得到一个警告消息(反之亦然),使用双引号来代替单引号也会得到一个警告消息(反之亦然)。但通常对不检查参数类型的编译器却除外。因此用printf('\n');来代替printf("\n");通常在运行时得到奇怪的结果。因为'\n'代表一个整数,它被转换为了一个指针,这个指针所指向的内容是没有意义的。
由于一个整数通常足够大,以至于可以放下多个字符,一些C编译器允许在一个字符常量中存放多个字符,这意味着用'yes'来代替'"yes"将不会被发现,后者意味着“包含Y E S和一个空字符的四个连续存储区域中的第一个的地址”,而后者意味着“在一些实现定义的样式中表示由Y E S联合构成的一个整数”。这两者之间的任何一致性都是巧合。