-
Notifications
You must be signed in to change notification settings - Fork 25
/
ch02s02.html
5 lines (5 loc) · 6.83 KB
/
ch02s02.html
1
2
3
4
5
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>2. 常量</title><link rel="stylesheet" href="styles.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /><link rel="start" href="index.html" title="Linux C编程一站式学习" /><link rel="up" href="ch02.html" title="第 2 章 常量、变量和表达式" /><link rel="prev" href="ch02s01.html" title="1. 继续Hello World" /><link rel="next" href="expr.variable.html" title="3. 变量" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2. 常量</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s01.html">上一页</a> </td><th width="60%" align="center">第 2 章 常量、变量和表达式</th><td width="20%" align="right"> <a accesskey="n" href="expr.variable.html">下一页</a></td></tr></table><hr /></div><div class="sect1" lang="zh-cn" xml:lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2707837"></a>2. 常量</h2></div></div></div><p>常量(Constant)<a id="id2707845" class="indexterm"></a>是程序中最基本的元素,有字符(Character)<a id="id2707852" class="indexterm"></a>常量、整数(Integer)<a id="id2707859" class="indexterm"></a>常量、浮点数(Floating Point)<a id="id2707866" class="indexterm"></a>常量和枚举常量。枚举常量将在<a class="xref" href="ch07s03.html#struct.datatag">第 3 节 “数据类型标志”</a>介绍。下面看一个例子:</p><pre class="programlisting">printf("character: %c\ninteger: %d\nfloating point: %f\n", '}', 34, 3.14);</pre><p>字符常量要用单引号括起来,例如上面的<code class="literal">'}'</code>,注意单引号只能括一个字符而不能像双引号那样括一串字符,字符常量也可以是一个转义序列,例如<code class="literal">'\n'</code>,这时虽然单引号括了两个字符,但实际上只表示一个字符。和字符串字面值中使用转义序列有一点区别,如果在字符常量中要表示双引号"和问号?,既可以使用转义序列<code class="literal">\"</code>和<code class="literal">\?</code>,也可以直接用字符"和?,而要表示'和\则必须使用转义序列。<sup>[<a id="id2707915" href="#ftn.id2707915" class="footnote">2</a>]</sup></p><p>计算机中整数和小数的内部表示方式不同(将在<a class="xref" href="ch14.html#number">第 14 章 <i>计算机中数的表示</i></a>详细介绍),因而在C语言中是两种不同的类型(Type)<a id="id2707953" class="indexterm"></a>,例如上例的<code class="literal">34</code>和<code class="literal">3.14</code>,小数在计算机术语中称为浮点数。这个语句的输出结果和Hello world不太一样,字符串<code class="literal">"character: %c\ninteger: %d\nfloating point: %f\n"</code>并不是按原样打印输出的,而是输出成这样:</p><pre class="screen">character: }
integer: 34
floating point: 3.14</pre><p><code class="literal">printf</code>中的第一个字符串称为格式化字符串(Format String)<a id="id2707992" class="indexterm"></a>,它规定了后面几个常量以何种格式插入到这个字符串中,在格式化字符串中%号(Percent Sign)<a id="id2708002" class="indexterm"></a>后面加上字母c、d、f分别表示字符型、整型和浮点型的转换说明(Conversion Specification)<a id="id2708011" class="indexterm"></a>,转换说明只在格式化字符串中占个位置,并不出现在最终的打印结果中,这种用法通常叫做占位符(Placeholder)<a id="id2708020" class="indexterm"></a>。这也是一种字面意思与真实意思不同的情况,但是转换说明和转义序列又有区别:<span class="emphasis"><em>转义序列是编译时处理的,而转换说明是在运行时调用<code class="literal">printf</code>函数处理的</em></span>。源文件中的字符串字面值是<code class="literal">"character: %c\ninteger: %d\nfloating point: %f\n"</code>,<code class="literal">\n</code>占两个字符,而编译之后保存在可执行文件中的字符串是<code class="literal">character: %c换行integer: %d换行floating point: %f换行</code>,<code class="literal">\n</code>已经被替换成一个换行符,而<code class="literal">%c</code>不变,然后在运行时这个字符串被传给<code class="literal">printf</code>,<code class="literal">printf</code>再把其中的<code class="literal">%c</code>、<code class="literal">%d</code>、<code class="literal">%f</code>解释成转换说明。</p><p>有时候不同类型的数据很容易弄混,例如<code class="literal">"5"</code>、<code class="literal">'5'</code>、<code class="literal">5</code>,如果你注意了它们的界定符就会很清楚,第一个是字符串字面值,第二个是字符,第三个是整数,看了本章后面几节你就知道为什么一定要严格区分它们之间的差别了。</p><div class="simplesect" lang="zh-cn" xml:lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a id="id2708122"></a>习题</h3></div></div></div><p>1、总结前面介绍的转义序列的规律,想想在<code class="literal">printf</code>的格式化字符串中怎么表示一个%字符?写个小程序试验一下。</p></div><div class="footnotes"><br /><hr width="100" align="left" /><div class="footnote"><p><sup>[<a id="ftn.id2707915" href="#id2707915" class="para">2</a>] </sup>读者可能会奇怪,为什么需要规定一个转义序列<code class="literal">\?</code>呢?因为C语言规定了一些三连符(Trigraph)<a id="id2707926" class="indexterm"></a>,在某些特殊的终端上缺少某些字符,需要用Trigraph输入,例如用<code class="literal">??=</code>表示#字符。Trigraph极不常用,介绍这个只是为了让读者理解C语言规定转义序列的作用,即特殊字符转普通字符,普通字符转特殊字符,?也是一种特殊字符。极不常用的C语法在本书中通常不会介绍。</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s01.html">上一页</a> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">上一级</a></td><td width="40%" align="right"> <a accesskey="n" href="expr.variable.html">下一页</a></td></tr><tr><td width="40%" align="left" valign="top">1. 继续Hello World </td><td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td><td width="40%" align="right" valign="top"> 3. 变量</td></tr></table></div></body></html>