﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-tiger7-文章分类-C++</title><link>http://www.cppblog.com/tiger7/category/13163.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 09 Jun 2012 16:24:34 GMT</lastBuildDate><pubDate>Sat, 09 Jun 2012 16:24:34 GMT</pubDate><ttl>60</ttl><item><title>C++ Primer 学习笔记（五） ---- 第三章 标准库类型（2）</title><link>http://www.cppblog.com/tiger7/articles/175807.html</link><dc:creator>tiger7</dc:creator><author>tiger7</author><pubDate>Sat, 09 Jun 2012 13:10:00 GMT</pubDate><guid>http://www.cppblog.com/tiger7/articles/175807.html</guid><wfw:comment>http://www.cppblog.com/tiger7/comments/175807.html</wfw:comment><comments>http://www.cppblog.com/tiger7/articles/175807.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tiger7/comments/commentRss/175807.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tiger7/services/trackbacks/175807.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、知识点1、命名空间的using声明2、标准库string类型3、标准库vector类型4、迭代器简介5、标准库bitset类型二、要点&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、标准库vector类型&nbsp;初始化vector对象的方式vector&lt;T&gt; v1v1保存T类型的对象。采用T的默认构造函...&nbsp;&nbsp;<a href='http://www.cppblog.com/tiger7/articles/175807.html'>阅读全文</a><img src ="http://www.cppblog.com/tiger7/aggbug/175807.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tiger7/" target="_blank">tiger7</a> 2012-06-09 21:10 <a href="http://www.cppblog.com/tiger7/articles/175807.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ Primer 学习笔记（四） ---- 第三章 标准库类型（1）</title><link>http://www.cppblog.com/tiger7/articles/151575.html</link><dc:creator>tiger7</dc:creator><author>tiger7</author><pubDate>Tue, 22 May 2012 13:57:00 GMT</pubDate><guid>http://www.cppblog.com/tiger7/articles/151575.html</guid><wfw:comment>http://www.cppblog.com/tiger7/comments/151575.html</wfw:comment><comments>http://www.cppblog.com/tiger7/articles/151575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tiger7/comments/commentRss/151575.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tiger7/services/trackbacks/151575.html</trackback:ping><description><![CDATA[<blockquote>
<p><strong>一、知识点<br /></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000"> 1、命名空间的using声明</span><br /><span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、标准库string类型</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、标准库vector类型<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、迭代器简介<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、标准库bitset类型<br /><br /><span style="color: #ff0000"><strong style="color: #000000">二、要点</strong></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、命名空间的using声明<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用using声明可以在不需要加前缀namespace_name：：的情况下访问命名空间中的名字，格式如：<span style="color: #0000ff">using namespace::name;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、标准库string类型<br /></p>
<blockquote>
<table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse; border-top: medium none; border-right: medium none" border="1" rules="groups" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; border-top: black 1pt solid; border-right: medium none; padding-top: 0cm" valign="top" colspan="2">
<p align="center"><strong><span style="color: black">string</span></strong><strong><span style="font-family: 宋体; color: black">对象初始化方式</span><span style="color: black"></span></strong></p></td></tr>
<tr>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 213.05pt; padding-right: 5.4pt;background: silver; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top" width="284">
<p><strong><span style="color: black">string s1;</span></strong></p></td>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt;background: silver; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top">
<p><span style="font-family: 宋体; color: #0000ff">默认构造函数，</span><span style="color: #0000ff">s1</span><span style="font-family: 宋体; color: #0000ff">为空串</span></p></td></tr>
<tr>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 213.05pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top" width="284">
<p><strong><span style="color: black">string s2(s1)</span></strong></p></td>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 296px; padding-right: 5.4pt; height: 28px; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top">
<p><span style="font-family: 宋体; color: #0000ff">将</span><span style="color: #0000ff">s2</span><span style="font-family: 宋体; color: #0000ff">初始化为</span><span style="color: #0000ff">s1</span><span style="font-family: 宋体; color: #0000ff">的一个副本</span></p></td></tr>
<tr>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 213.05pt; padding-right: 5.4pt;background: silver; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top" width="284">
<p><strong><span style="color: black">string s3(&#8220;Value&#8221;);</span></strong></p></td>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt;background: silver; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top">
<p><span style="font-family: 宋体; color: #0000ff">将</span><span style="color: #0000ff">s3</span><span style="font-family: 宋体; color: #0000ff">初始化为一个字符串字面值的副本</span></p></td></tr>
<tr>
<td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 213.05pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top" width="284">
<p><strong><span style="color: black">string s4(n, &#8216;c&#8217;);</span></strong></p></td>
<td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top">
<p><span style="font-family: 宋体; color: #0000ff">将</span><span style="color: #0000ff">s4</span><span style="font-family: 宋体; color: #0000ff">初始化为字符</span><span style="color: #0000ff">&#8216;c&#8217;</span><span style="font-family: 宋体; color: #0000ff">的</span><span style="color: #0000ff">n</span><span style="font-family: 宋体; color: #0000ff">个副本</span></p></td></tr></tbody></table></blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （1）、string类型的输入操作符和getline函数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string类型的输入操作符：读取并忽略开头所有的空白字符（空格、换行符、制表符）；读取字符直到再次遇到空白字符，读取结束。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getline函数：包含2个参数，输入流对象和string对象；读取内容直到碰到换行符，但并不包括换行符（它不忽略开头的换行符，如果有，那么这次的读取内容为空）<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （2）、string::size_type类型<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string::size_type是一种与机器无关的、无符号的整型类型（int，long都可能），它可以保存任意string对象的长度。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （3）、与字符串字面值连接的注意点<br /></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 90.94%; padding-right: 5px; height: 141px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;s1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">hello</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;s2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">world</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;s3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;s1&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;ok</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;s4&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">hello</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;error：不能2个字面串字面值相加</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;s5&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;s1&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">world</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;ok：s1和"&nbsp;"相加后还是一个新的string对象，可以和后面的相加</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;s6&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">hello</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;s2;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;error：前面2个就相当于字面串字面值相加<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span></div>
<div><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（4）、string对象中字符的处理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主要是用到cctype头文件中定义的函数，如下：&nbsp; 
<blockquote>
<table style="border-bottom: medium none; border-left: medium none; border-collapse: collapse; border-top: medium none; border-right: medium none" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="border-bottom: medium none; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt;background: #8064a2; border-top: #8064a2 1pt solid; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p align="center"><strong><span style="color: #cce8cf">Cctype</span></strong><strong><span style="font-family: 宋体; color: #cce8cf">定义的函数</span><span style="color: #cce8cf"></span></strong></p></td>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt;background: #8064a2; border-top: #8064a2 1pt solid; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><strong>&nbsp;</strong></p></td></tr>
<tr>
<td style="border-bottom: #8064a2 1pt solid; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>isalnum(c)</strong></p></td>
<td style="border-bottom: #8064a2 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">是字母和数字，则为</span>true</p></td></tr>
<tr>
<td style="border-bottom: medium none; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>isalpha(c)</strong></p></td>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: medium none; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">是字母，则为</span>true</p></td></tr>
<tr>
<td style="border-bottom: #8064a2 1pt solid; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>isdigit(c)</strong></p></td>
<td style="border-bottom: #8064a2 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">是数字，则为</span>true</p></td></tr>
<tr>
<td style="border-bottom: medium none; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>isxdigit(c)</strong></p></td>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: medium none; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">是十六进制数，则为</span>true</p></td></tr>
<tr>
<td style="border-bottom: #8064a2 1pt solid; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>iscntrl(c)</strong></p></td>
<td style="border-bottom: #8064a2 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">是控制字符，则为</span>true</p></td></tr>
<tr>
<td style="border-bottom: medium none; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>ispunct(c)</strong></p></td>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: medium none; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">是标点符号，则为</span>true</p></td></tr>
<tr>
<td style="border-bottom: #8064a2 1pt solid; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>isspace(c)</strong></p></td>
<td style="border-bottom: #8064a2 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">是空白字符，则为</span>true</p></td></tr>
<tr>
<td style="border-bottom: medium none; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>isprint(c)</strong></p></td>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: medium none; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">是可打印的字符，则为</span>true</p></td></tr>
<tr>
<td style="border-bottom: #8064a2 1pt solid; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>isgraph(c)</strong></p></td>
<td style="border-bottom: #8064a2 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">不是空格，但可以打印，则为</span>true</p></td></tr>
<tr>
<td style="border-bottom: medium none; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>islower(c)</strong></p></td>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: medium none; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">是小写字母，则为</span>true</p></td></tr>
<tr>
<td style="border-bottom: #8064a2 1pt solid; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>isupper(c)</strong></p></td>
<td style="border-bottom: #8064a2 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">是大写字母，则为</span>true</p></td></tr>
<tr>
<td style="border-bottom: medium none; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: medium none; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>tolower(c)</strong></p></td>
<td style="border-bottom: medium none; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: medium none; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">是大写字母，则返回其小写字母形式，否则直接返回</span>c</p></td></tr>
<tr>
<td style="border-bottom: #8064a2 1pt solid; border-left: #8064a2 1pt solid; padding-bottom: 0cm; padding-left: 5.4pt; width: 111.75pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: medium none; padding-top: 0cm" valign="top" width="149">
<p><strong>toupper(c)</strong></p></td>
<td style="border-bottom: #8064a2 1pt solid; border-left: medium none; padding-bottom: 0cm; padding-left: 5.4pt; width: 314.35pt; padding-right: 5.4pt; border-top: #8064a2 1pt solid; border-right: #8064a2 1pt solid; padding-top: 0cm" valign="top" width="419">
<p><span style="font-family: 宋体">如果</span>c<span style="font-family: 宋体">是大写字母，则返回其小写字母形式，否则直接返回</span>c</p></td></tr></tbody></table></blockquote><br /></div>
<p>&nbsp;&nbsp;&nbsp;</p></blockquote>  <img src ="http://www.cppblog.com/tiger7/aggbug/151575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tiger7/" target="_blank">tiger7</a> 2012-05-22 21:57 <a href="http://www.cppblog.com/tiger7/articles/151575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ Primer 学习笔记（三） ---- 第二章 变量和基本类型（2）</title><link>http://www.cppblog.com/tiger7/articles/121809.html</link><dc:creator>tiger7</dc:creator><author>tiger7</author><pubDate>Mon, 20 Jun 2011 13:53:00 GMT</pubDate><guid>http://www.cppblog.com/tiger7/articles/121809.html</guid><wfw:comment>http://www.cppblog.com/tiger7/comments/121809.html</wfw:comment><comments>http://www.cppblog.com/tiger7/articles/121809.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tiger7/comments/commentRss/121809.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tiger7/services/trackbacks/121809.html</trackback:ping><description><![CDATA[<strong style>一、知识点</strong><br />
<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、基本内置类型（算术类型和void类型）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、字面值常量和变量</span><br />
<span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、const限定符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4、引用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5、typedef名字<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6、枚举<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7、类类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8、头文件<br />
<br />
<strong style="color: #000000">二、要点</strong></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、const限定符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 魔数：在上下文中没有体现出来，好像这个数是魔术般的从空中出现的。如下面的&#8220;512&#8221;这个数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_31_44_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_44_Open_Text.style.display='none'; Codehighlighter1_31_44_Closed_Image.style.display='inline'; Codehighlighter1_31_44_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_31_44_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_31_44_Closed_Text.style.display='none'; Codehighlighter1_31_44_Open_Image.style.display='inline'; Codehighlighter1_31_44_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: red">512</span><span style="color: #000000">;&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">i)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_31_44_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_31_44_Open_Text"><span style="color: #000000">{<br />
<img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"><img alt="" src="http://www.cppblog.com/Images/dot.gif" />..</span><span style="color: #008000"><br />
<img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" /></span><span style="color: #000000">}</span></span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用const限定符需注意：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （1）、定义的const的变量仍难是一个左值，但是这个左值是不可修改的；且在定义时必须初始化；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（2）、const变量默认都是文件局部的，如果想被其他文件访问，必须在前面加入extern。如：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #000000">file_1.cpp:<br />
<img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;bufszie&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">512</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;定义，需要赋初值</span><span style="color: #008000"><br />
<img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #000000"><br />
<img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" />fiel_2.cpp:<br />
<img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /></span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;bufsize;<br />
<img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" alt="" /><img src="http://www.cppblog.com/Images/dot.gif" alt="" />.<br />
<img id="Codehighlighter1_132_143_Open_Image" onclick="this.style.display='none'; Codehighlighter1_132_143_Open_Text.style.display='none'; Codehighlighter1_132_143_Closed_Image.style.display='inline'; Codehighlighter1_132_143_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_132_143_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_132_143_Closed_Text.style.display='none'; Codehighlighter1_132_143_Open_Image.style.display='inline'; Codehighlighter1_132_143_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;bufsize； ++i)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_132_143_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_132_143_Open_Text"><span style="color: #000000">{<br />
<img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"><img src="http://www.cppblog.com/Images/dot.gif" alt="" />.</span><span style="color: #008000"><br />
<img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" /></span><span style="color: #000000">}</span></span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、引用<br />
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;引用（reference）就是对象的另一个名称；非congst引用只能绑定到与该引用相同类型的对方上，const引用可以绑定到不同但相关的类型对象或绑定到右值。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;重点：const引用，指向const对象的引用。
<div style="font-size: 13px; border-top-color: #cccccc; border-left-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-top-width: 1px; border-left-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-top-style: solid; border-left-style: solid; border-right-style: solid; border-bottom-style: solid; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; background-color: #eeeeee"><span style="color: #000000; ">1</span><span style="color: #000000; ">、赋值<br />
</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ival&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1024</span><span style="color: #000000; ">;<br />
</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">refVal&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ival;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;这个是正确的赋值</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ref2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; "> ival; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000">&nbsp;这个是错误的赋值（ref2是可以重新赋值，这样导致ival的值会被改变，但ival是const的，所以这样赋值是不允许的）</span><span style="color: #008000; "><br />
</span><span style="color: #000000"><br />
</span><span style="color: #000000; ">2</span><span style="color: #000000; ">、初始化<br />
</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;dval&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">42.12</span><span style="color: #000000; ">;<br />
</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">r1&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">42</span><span style="color: #000000; ">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;用右值（字面值常量）初始化</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">r2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dval;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;用不同那个类型的对象初始化，这里的r2&nbsp;=&nbsp;42。如果r2不是const的话，这样初始化是错误的。</span></div>
<br />
<p>&nbsp; &nbsp; &nbsp; &nbsp;3、typedef</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; typedef可以用来定义类型的同义词。格式为：typedef + 数据类型 + 标识符。</p>
<p><br />
</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 4、枚举（enum）</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 格式：enum enumName(l可选) {enumerator1， enumerator2，...}<br />
</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;（1）、枚举成员都是常量表达式（在编译器编译是就能计算出结果的整型表达式，或整型字面值常量）；</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;（2）、默认的第一个枚举成员是0，后面的每个枚举成员都比前一个大1；</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;（3）、枚举成员值不是唯一的：enum Points { p1 = 1, p2, p3 = 2, p4}，这其中p1=1,p2=2,p3=2,p4=3；</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;（4）、枚举类型的对象初始化或赋值时，只能通过该类型枚举的某个成员进行。</p>
<p><br />
</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;5、类类型</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;注意class和struct的区别：唯一区别，<span style="color: #ff0000">默认情况下，struct的成员为public，class的成员为private。</span></p>
<p><br />
</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;6、头文件</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;在const变量是用常量表达式初始化时，可以将它定义在头文件中；如果不是，则不应该在头文件中定义。</p>
 <img src ="http://www.cppblog.com/tiger7/aggbug/121809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tiger7/" target="_blank">tiger7</a> 2011-06-20 21:53 <a href="http://www.cppblog.com/tiger7/articles/121809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>int* a与int *a（转）</title><link>http://www.cppblog.com/tiger7/articles/146072.html</link><dc:creator>tiger7</dc:creator><author>tiger7</author><pubDate>Tue, 10 May 2011 01:43:00 GMT</pubDate><guid>http://www.cppblog.com/tiger7/articles/146072.html</guid><wfw:comment>http://www.cppblog.com/tiger7/comments/146072.html</wfw:comment><comments>http://www.cppblog.com/tiger7/articles/146072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tiger7/comments/commentRss/146072.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tiger7/services/trackbacks/146072.html</trackback:ping><description><![CDATA[<p>
int* a; int *a;</p>
<p>这个大家看不出来区别的话那我举个例子:</p>
<p>int* a[]; int (*a)[];
</p>
<p><span style="color: #ff0000">前者是指针数组，数组里每个元素是指针，后者是数组指针，这个(*a)[]指向一个数组的地址。</span></p>
<p>再看下个例子:</p>
<p>int* a(); int (*a)();
</p>
<p><span style="color: #ff0000">前者返回一个整形指针，后者是函数指针，指向一个函数的地址;
也就是说
int* a; a是一个整形指针型变量
int *a; a本身是指针，存储整形变量的地址
就效果来说这两者等价，可能有点晕，对比下上面的例子理解下就好了。</span><span style="color: #ff0000"><br />
</span></p>
<img src ="http://www.cppblog.com/tiger7/aggbug/146072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tiger7/" target="_blank">tiger7</a> 2011-05-10 09:43 <a href="http://www.cppblog.com/tiger7/articles/146072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struct中char data[0]的用法</title><link>http://www.cppblog.com/tiger7/articles/143388.html</link><dc:creator>tiger7</dc:creator><author>tiger7</author><pubDate>Mon, 04 Apr 2011 04:31:00 GMT</pubDate><guid>http://www.cppblog.com/tiger7/articles/143388.html</guid><wfw:comment>http://www.cppblog.com/tiger7/comments/143388.html</wfw:comment><comments>http://www.cppblog.com/tiger7/articles/143388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tiger7/comments/commentRss/143388.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tiger7/services/trackbacks/143388.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近在学习老师的网络代码时，看到定义了一个如下的结构体：<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;MyData&nbsp;<br><img id=Codehighlighter1_15_43_Open_Image onclick="this.style.display='none'; Codehighlighter1_15_43_Open_Text.style.display='none'; Codehighlighter1_15_43_Closed_Image.style.display='inline'; Codehighlighter1_15_43_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_15_43_Closed_Image onclick="this.style.display='none'; Codehighlighter1_15_43_Closed_Text.style.display='none'; Codehighlighter1_15_43_Open_Image.style.display='inline'; Codehighlighter1_15_43_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_15_43_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span>{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;nLen;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">char&nbsp;data[0];<br></span><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}<span style="COLOR: #000000">;</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开始没有理解红色部分的内容，上网搜索下，发现用处很大，记录下来。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">&nbsp;在结构中，data是一个数组名；但该数组没有元素；该数组的真实地址紧随结构体MyData之后，而这个地址就是结构体后面数据的地址（如果给这个结构体分配的内容大于这个结构体实际大小，后面多余的部分就是这个data的内容）；这种声明方法可以巧妙的实现C语言里的数组扩展。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;实际用时采取这样：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;MyData *p = (struct MyData&nbsp;*)malloc(sizeof(struct MyData )+strlen(<span style="COLOR: #0000ff">str</span>))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这样就可以通过p-&gt;data 来操作这个<span style="COLOR: #0000ff">str</span>。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #000000">&nbsp;示例：<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;MyData&nbsp;<br><img id=Codehighlighter1_58_86_Open_Image onclick="this.style.display='none'; Codehighlighter1_58_86_Open_Text.style.display='none'; Codehighlighter1_58_86_Closed_Image.style.display='inline'; Codehighlighter1_58_86_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_58_86_Closed_Image onclick="this.style.display='none'; Codehighlighter1_58_86_Closed_Text.style.display='none'; Codehighlighter1_58_86_Open_Image.style.display='inline'; Codehighlighter1_58_86_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_58_86_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_58_86_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;data[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_101_378_Open_Image onclick="this.style.display='none'; Codehighlighter1_101_378_Open_Text.style.display='none'; Codehighlighter1_101_378_Closed_Image.style.display='inline'; Codehighlighter1_101_378_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_101_378_Closed_Image onclick="this.style.display='none'; Codehighlighter1_101_378_Closed_Text.style.display='none'; Codehighlighter1_101_378_Open_Image.style.display='inline'; Codehighlighter1_101_378_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_101_378_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_101_378_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;str[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">123456789</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Size&nbsp;of&nbsp;MyData:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(MyData)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;MyData&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">myData&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(MyData</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)malloc(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(MyData)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;memcpy(myData</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">data,&nbsp;&nbsp;str,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">myData's&nbsp;Data&nbsp;is:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;myData</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">data&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;free(myData);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
</span></span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输出：<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">Size&nbsp;of&nbsp;MyData:&nbsp;4<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">myData's&nbsp;Data&nbsp;is:&nbsp;123456789</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由于数组没有元素，该数组在该结构体中分配占用空间，所以sizeof(struct Mydata) = 4。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;malloc申请的是14个字节的连续空间，它返回一个指针指向这14个字节，强制转换成struct INFO的时候，前面4个字节被认为是Mydata结构，后面的部分拷贝了&#8220;123456789&#8221;的内容。 
<img src ="http://www.cppblog.com/tiger7/aggbug/143388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tiger7/" target="_blank">tiger7</a> 2011-04-04 12:31 <a href="http://www.cppblog.com/tiger7/articles/143388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）typedef和#define的用法与区别</title><link>http://www.cppblog.com/tiger7/articles/142399.html</link><dc:creator>tiger7</dc:creator><author>tiger7</author><pubDate>Mon, 21 Mar 2011 12:39:00 GMT</pubDate><guid>http://www.cppblog.com/tiger7/articles/142399.html</guid><wfw:comment>http://www.cppblog.com/tiger7/comments/142399.html</wfw:comment><comments>http://www.cppblog.com/tiger7/articles/142399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tiger7/comments/commentRss/142399.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tiger7/services/trackbacks/142399.html</trackback:ping><description><![CDATA[<p>typedef和#define的用法与区别 <br><br>一、typedef的用法</p>
<p>在C/C++语言中，typedef常用来定义一个标识符及关键字的别名，它是语言编译过程的一部分，但它并不实际分配内存空间，实例像：</p>
<p>typedef&#160;&#160;&#160; int&#160;&#160;&#160;&#160;&#160;&#160; INT;<br>typedef&#160;&#160;&#160; int&#160;&#160;&#160;&#160;&#160;&#160; ARRAY[10];<br>typedef&#160;&#160; (int*)&#160;&#160; pINT;</p>
<p>typedef可以增强程序的可读性，以及标识符的灵活性，但它也有&#8220;非直观性&#8221;等缺点。</p>
<p><br>二、#define的用法</p>
<p>#define为一宏定义语句，通常用它来定义常量(包括无参量与带参量)，以及用来实现那些&#8220;表面似和善、背后一长串&#8221;的宏，它本身并不在编</p>
<p>译过程中进行，而是在这之前(<span style="COLOR: red">预处理过程</span>)就已经完成了，但也因此难以发现潜在的错误及其它代码维护问题，它的实例像：</p>
<p>#define&#160;&#160; INT&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int<br>#define&#160;&#160; TRUE&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1<br>#define&#160;&#160; Add(a,b)&#160;&#160;&#160;&#160; ((a)+(b));<br>#define&#160;&#160; Loop_10&#160;&#160;&#160; for (int i=0; i<10; i++)</p>
<p>在Scott Meyer的Effective C++一书的条款1中有关于#define语句弊端的分析，以及好的替代方法，大家可参看。</p>
<p><br>三、typedef与#define的区别</p>
<p>从以上的概念便也能基本清楚，typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名)，而#define原本在C中是为了定义常量</p>
<p>，到了C++，const、enum、inline的出现使它也渐渐成为了起别名的工具。有时很容易搞不清楚与typedef两者到底该用哪个好，如#define </p>
<p>INT int这样的语句，用typedef一样可以完成，用哪个好呢？我主张用typedef，因为在早期的许多C编译器中这条语句是非法的，只是现今的</p>
<p>编译器又做了扩充。为了尽可能地兼容，一般都遵循#define定义&#8220;可读&#8221;的常量以及一些宏语句的任务，而typedef则常用来定义关键字、冗</p>
<p>长的类型的别名。</p>
<p>宏定义只是简单的字符串代换(原地扩展)，而typedef则不是原地扩展，它的新名字具有一定的封装性，以致于新命名的标识符具有更易定义变</p>
<p>量的功能。请看上面第一大点代码的第三行：</p>
<p>typedef&#160;&#160;&#160; (int*)&#160;&#160;&#160;&#160;&#160; pINT;<br>以及下面这行:<br>#define&#160;&#160;&#160; pINT2&#160;&#160;&#160; int*</p>
<p>效果相同？实则不同！实践中见差别：pINT a,b;的效果同int *a; int *b;表示定义了两个整型指针变量。而pINT2 a,b;的效果同int *a, b;</p>
<p>表示定义了一个整型指针变量a和整型变量b。</p>
<p>&#160;</p>
<p>&#160;typedef的四个用途和两个陷阱</p>
<p>用途一： <br>定义一种类型的别名，而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如： <br>char*&#160;&#160; pa,&#160;&#160; pb;&#160;&#160;&#160;&#160; //&#160;&#160; 这多数不符合我们的意图，它只声明了一个指向字符变量的指针，&#160;&#160; <br>//&#160;&#160; 和一个字符变量； <br>以下则可行： <br>typedef&#160;&#160; char*&#160;&#160; PCHAR;&#160;&#160;&#160;&#160; //&#160;&#160; 一般用大写 <br>PCHAR&#160;&#160; pa,&#160;&#160; pb;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //&#160;&#160; 可行，同时声明了两个指向字符变量的指针 <br>虽然： <br>char&#160;&#160; *pa,&#160;&#160; *pb; <br>也可行，但相对来说没有用typedef的形式直观，尤其在需要大量指针的地方，typedef的方式更省事。 </p>
<p>用途二： <br>用在旧的C代码中（具体多旧没有查），帮助struct。以前的代码中，声明struct新对象时，必须要带上struct，即形式为：&#160;&#160; struct&#160;&#160; 结构名&#160;&#160; 对象名，如： <br>struct&#160;&#160; tagPOINT1 <br>{ <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; int&#160;&#160; x; <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; int&#160;&#160; y; <br>}; <br>struct&#160;&#160; tagPOINT1&#160;&#160; p1;&#160;&#160; </p>
<p>而在C++中，则可以直接写：结构名&#160;&#160; 对象名，即： <br>tagPOINT1&#160;&#160; p1; </p>
<p>估计某人觉得经常多写一个struct太麻烦了，于是就发明了： <br>typedef&#160;&#160; struct&#160;&#160; tagPOINT <br>{ <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; int&#160;&#160; x; <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; int&#160;&#160; y; <br>}POINT; </p>
<p>POINT&#160;&#160; p1;&#160;&#160; //&#160;&#160; 这样就比原来的方式少写了一个struct，比较省事，尤其在大量使用的时候 </p>
<p>或许，在C++中，typedef的这种用途二不是很大，但是理解了它，对掌握以前的旧代码还是有帮助的，毕竟我们在项目中有可能会遇到较早些年代遗留下来的代码。 </p>
<p>用途三： <br>用typedef来定义与平台无关的类型。 <br>比如定义一个叫&#160;&#160; REAL&#160;&#160; 的浮点类型，在目标平台一上，让它表示最高精度的类型为： <br>typedef&#160;&#160; long&#160;&#160; double&#160;&#160; REAL;&#160;&#160; <br>在不支持&#160;&#160; long&#160;&#160; double&#160;&#160; 的平台二上，改为： <br>typedef&#160;&#160; double&#160;&#160; REAL;&#160;&#160; <br>在连&#160;&#160; double&#160;&#160; 都不支持的平台三上，改为： <br>typedef&#160;&#160; float&#160;&#160; REAL;&#160;&#160; <br>也就是说，当跨平台时，只要改下&#160;&#160; typedef&#160;&#160; 本身就行，不用对其他源码做任何修改。 <br>标准库就广泛使用了这个技巧，比如size_t。 <br>另外，因为typedef是定义了一种类型的新别名，不是简单的字符串替换，所以它比宏来得稳健（虽然用宏有时也可以完成以上的用途）。 </p>
<p>用途四： <br>为复杂的声明定义一个新的简单的别名。方法是：在原来的声明里逐步用别名替换一部分复杂声明，如此循环，把带变量名的部分留到最后替换，得到的就是原声明的最简化版。举例： </p>
<p>1.&#160;&#160; 原声明：int&#160;&#160; *(*a[5])(int,&#160;&#160; char*); <br>变量名为a，直接用一个新别名pFun替换a就可以了： <br>typedef&#160;&#160; int&#160;&#160; *(*pFun)(int,&#160;&#160; char*);&#160;&#160; <br>原声明的最简化版： <br>pFun&#160;&#160; a[5];&#160;&#160; </p>
<p>2.&#160;&#160; 原声明：void&#160;&#160; (*b[10])&#160;&#160; (void&#160;&#160; (*)()); <br>变量名为b，先替换右边部分括号里的，pFunParam为别名一： <br>typedef&#160;&#160; void&#160;&#160; (*pFunParam)(); <br>再替换左边的变量b，pFunx为别名二： <br>typedef&#160;&#160; void&#160;&#160; (*pFunx)(pFunParam); <br>原声明的最简化版： <br>pFunx&#160;&#160; b[10]; </p>
<p>3.&#160;&#160; 原声明：doube(*)()&#160;&#160; (*e)[9];&#160;&#160; <br>变量名为e，先替换左边部分，pFuny为别名一： <br>typedef&#160;&#160; double(*pFuny)(); <br>再替换右边的变量e，pFunParamy为别名二 <br>typedef&#160;&#160; pFuny&#160;&#160; (*pFunParamy)[9]; <br>原声明的最简化版： <br>pFunParamy&#160;&#160; e;&#160;&#160; </p>
<p>理解复杂声明可用的&#8220;右左法则&#8221;：<span style="COLOR: red">从变量名看起，先往右，再往左，碰到一个圆括号就调转阅读的方向；括号内分析完就跳出括号，还是按先右后左的顺序，如此循环，直到整个声明分析完</span>。举例： <br>int&#160;&#160; (*func)(int&#160;&#160; *p); <br>首先找到变量名func，外面有一对圆括号，而且左边是一个*号，这说明func是一个指针；然后跳出这个圆括号，先看右边，又遇到圆括号，这说明(*func)是一个函数，所以func是一个指向这类函数的指针，即函数指针，这类函数具有int*类型的形参，返回值类型是int。 <br>int&#160;&#160; (*func[5])(int&#160;&#160; *); <br>func右边是一个[]运算符，说明func是具有5个元素的数组；func的左边有一个*，说明func的元素是指针（注意这里的*不是修饰func，而是修饰func[5]的，原因是[]运算符优先级比*高，func先跟[]结合）。跳出这个括号，看右边，又遇到圆括号，说明func数组的元素是函数类型的指针，它指向的函数具有int*类型的形参，返回值类型为int。 </p>
<p>也可以记住2个模式： <br>type&#160;&#160; (*)(....)函数指针&#160;&#160; <br>type&#160;&#160; (*)[]数组指针&#160;&#160; <br>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－ <br></p>
<p>陷阱一： <br>记住，typedef是定义了一种类型的新别名，不同于宏，它不是简单的字符串替换。比如： <br>先定义： <br>typedef&#160;&#160; char*&#160;&#160; PSTR; <br>然后： <br>int&#160;&#160; mystrcmp(const&#160;&#160; PSTR,&#160;&#160; const&#160;&#160; PSTR); </p>
<p>const&#160;&#160; PSTR实际上相当于const&#160;&#160; char*吗？不是的，它实际上相当于char*&#160;&#160; const。 <br>原因在于const给予了整个指针本身以常量性，也就是形成了常量指针char*&#160;&#160; const。 <br>简单来说，记住当const和typedef一起出现时，typedef不会是简单的字符串替换就行。 </p>
<p>陷阱二： <br>typedef在语法上是一个存储类的关键字（如auto、extern、mutable、static、register等一样），虽然它并不真正影响对象的存储特性，如： <br>typedef&#160;&#160; static&#160;&#160; int&#160;&#160; INT2;&#160;&#160; //不可行 <br>编译将失败，会提示&#8220;指定了一个以上的存储类&#8221;。</p>
 <img src ="http://www.cppblog.com/tiger7/aggbug/142399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tiger7/" target="_blank">tiger7</a> 2011-03-21 20:39 <a href="http://www.cppblog.com/tiger7/articles/142399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>知道为什么需要htons(), ntohl(), ntohs()，htons() 函数吗? （转）</title><link>http://www.cppblog.com/tiger7/articles/123520.html</link><dc:creator>tiger7</dc:creator><author>tiger7</author><pubDate>Sun, 15 Aug 2010 13:06:00 GMT</pubDate><guid>http://www.cppblog.com/tiger7/articles/123520.html</guid><wfw:comment>http://www.cppblog.com/tiger7/comments/123520.html</wfw:comment><comments>http://www.cppblog.com/tiger7/articles/123520.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tiger7/comments/commentRss/123520.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tiger7/services/trackbacks/123520.html</trackback:ping><description><![CDATA[<p>知道为什么需要htons(), ntohl(), ntohs()，htons() 函数吗?&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在C/C++写网络程序的时候，往往会遇到字节的网络顺序和主机顺序的问题。这是就可能用到htons(), ntohl(), ntohs()，htons()这4个函数。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网络字节顺序与本地字节顺序之间的转换函数：<br></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">1</span><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">htonl()</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Host&nbsp;to&nbsp;Network&nbsp;Long</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">ntohl()</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Network&nbsp;to&nbsp;Host&nbsp;Long</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">htons()</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Host&nbsp;to&nbsp;Network&nbsp;Short</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">ntohs()</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Network&nbsp;to&nbsp;Host&nbsp;Short</span><span style="COLOR: #000000">"</span></div>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 之所以需要这些函数是因为计算机数据表示存在两种字节顺序：NBO与HBO</p>
<p>网络字节顺序NBO（Network Byte Order）：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按从高到低的顺序存储，在网络上使用统一的网络字节顺序，可以避免兼容性问题。</p>
<p>主机字节顺序（HBO，Host Byte Order）：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不同的机器HBO不相同，与CPU设计有关，数据的顺序是由cpu决定的,而与操作系统无关。<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如 Intel&nbsp;&nbsp; x86结构下,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short型数0x1234表示为34&nbsp;&nbsp; 12, int型数0x12345678表示为78&nbsp;&nbsp; 56&nbsp;&nbsp; 34&nbsp;&nbsp; 12&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如IBM&nbsp;&nbsp; power PC结构下,&nbsp;short型数0x1234表示为12&nbsp;&nbsp; 34, int型数0x12345678表示为12&nbsp;&nbsp; 34&nbsp;&nbsp; 56&nbsp;&nbsp; 78<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于这个原因不同体系结构的机器之间无法通信,所以要转换成一种约定的数序,也就是网络字节顺序,其实就是如同power&nbsp;&nbsp; pc那样的顺序 。在PC开发中有ntohl和htonl函数可以用来进行网络字节和主机字节的转换。</p>
<br><br>PS：转自<a href="http://www.cnblogs.com/heaad/archive/2009/07/16/1525112.html">http://www.cnblogs.com/heaad/archive/2009/07/16/1525112.html</a>
<img src ="http://www.cppblog.com/tiger7/aggbug/123520.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tiger7/" target="_blank">tiger7</a> 2010-08-15 21:06 <a href="http://www.cppblog.com/tiger7/articles/123520.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ Primer 学习笔记（二） ---- 第二章 变量和基本类型（1）</title><link>http://www.cppblog.com/tiger7/articles/112815.html</link><dc:creator>tiger7</dc:creator><author>tiger7</author><pubDate>Sat, 31 Jul 2010 12:23:00 GMT</pubDate><guid>http://www.cppblog.com/tiger7/articles/112815.html</guid><wfw:comment>http://www.cppblog.com/tiger7/comments/112815.html</wfw:comment><comments>http://www.cppblog.com/tiger7/articles/112815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tiger7/comments/commentRss/112815.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tiger7/services/trackbacks/112815.html</trackback:ping><description><![CDATA[<p><strong>一、知识点</strong><br><span style="COLOR: red">&#160;&#160;&#160;&#160;&#160;&#160; 1、基本内置类型（算术类型和void类型）</span><br><span style="COLOR: red">&#160;&#160;&#160;&#160;&#160;&#160; 2、字面值常量和变量</span><br>&#160;&#160;&#160;&#160;&#160;&#160; 3、const限定符<br>&#160;&#160;&#160;&#160;&#160;&#160; 4、引用<br>&#160;&#160;&#160;&#160;&#160;&#160; 5、typedef名字<br>&#160;&#160;&#160;&#160;&#160;&#160; 6、枚举<br>&#160;&#160;&#160;&#160;&#160;&#160; 7、类类型<br>&#160;&#160;&#160;&#160;&#160;&#160; 8、头文件<br><br><strong>二、要点</strong></p>
&#160;&#160;&#160;&#160;&#160;&#160; <em>1、基本内置类型<br></em>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;算术类型（arithmetic type）包括：整数、浮点数、单个字符和布尔值。 整型包括整数、字符和布尔值；整数包括有符号和无符号的，无符号都表示正整数，有符号的可以表示负数（当符号位为1时，值为负数；符号位为0时，表示正数；符号位一般是高位）。浮点数包括单精度（float&#160; 32位）、双精度（double&#160; 64位）、扩展精度（long double&#160; 96或128位）。<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <em>2、字面值常量<br></em>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 只有内置类型存在字面值，没有类类型的字面值。<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 20（十进制），024（八进制，以零开头），0x14（十六进制，以0x开头）&#160;&#160;&#160;&#160; -------------&#160;&#160;&#160;&#160;&#160; 整形字面值<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3.14159F（单精度），12.345L（扩展精度），0e0（科学计数）&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; -------------&#160;&#160;&#160;&#160;&#160;&#160;浮点字面值<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; true，false&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; -------------&#160;&#160;&#160;&#160;&#160; 布尔字面值<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 'a'，'2'（这两个都是字符），L'a'（宽字符，wchar_t）&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; -------------&#160;&#160;&#160;&#160;&#160;&#160;字符字面值<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "Hello World"（字符串），L"Hello World"（宽字符串）&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; -------------&#160;&#160;&#160;&#160;&#160; 字符串字面值<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 此外还有一些&#8220;非打印字符转换序列&#8221;：如：\n（换行）、\t（水平制表符）、\r（回车符）、\\（反斜杠）等（也可以用\ooo，即3个反斜杠加3个数字来表示，对于与ASCII码）。<br><br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <em>3、变量<br></em>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 右值（rvalue）：右值只能出现在赋值的右边，不能出现在赋值语句的左边；<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 左值（lvalue）：左值可以出现在赋值语句的左边，也可以出现在右边。<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;数字字面值是右值，因此不能被赋值，如 0 = 1，这样就是错误的。<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 变量名（标识符），由字母、数字和下划线组成。必须以下划线或字母开头，不能以数字开头。标识符不能包含2个连续的下划线，也不能以下划线开头后面紧跟一个大写字母。注意一些C++中关键字。<br><br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 变量的初始化：<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int ival(1024);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//直接初始化<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int ival = 1024;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //复制初始化<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 声明（表明变量的名称和类型）、定义（还要为变量分配存储空间）。
  <img src ="http://www.cppblog.com/tiger7/aggbug/112815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tiger7/" target="_blank">tiger7</a> 2010-07-31 20:23 <a href="http://www.cppblog.com/tiger7/articles/112815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ Primer 学习笔记（一） ----  第一章 快速入门</title><link>http://www.cppblog.com/tiger7/articles/112208.html</link><dc:creator>tiger7</dc:creator><author>tiger7</author><pubDate>Fri, 16 Apr 2010 17:01:00 GMT</pubDate><guid>http://www.cppblog.com/tiger7/articles/112208.html</guid><wfw:comment>http://www.cppblog.com/tiger7/comments/112208.html</wfw:comment><comments>http://www.cppblog.com/tiger7/articles/112208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tiger7/comments/commentRss/112208.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tiger7/services/trackbacks/112208.html</trackback:ping><description><![CDATA[一、知识点<br>&#160;&#160;&#160;&#160;1、基本的C++程序<br>&#160;&#160;&#160;&#160;2、4个基本的输入输出对象<br>&#160;&#160;&#160;&#160;3、注释：//、/*..*/<br>&#160;&#160;&#160;&#160;4、控制语句（while、for、if）<br>&#160;&#160;&#160;&#160;5、类类型（类的简单介绍）<br>&#160;<br>二、要点&#160;<br>&#160;&#160;&#160;1、基本的C++程序<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;C++程序最重要的是main函数，每个C++程序必须包含，它（main函数）是操作系统唯一能显示调用的函数。<br>&#160;&#160;&#160;&#160;2、4个基本的输入输出对象<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;cin：标准输入；cout：标准输出；clog：产生程序执行的一般信息；cerr：标准错误，输出警告和错误信息。<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;一个简单的输入输出程序：<iostream> <br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include&#160;</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&#160;main()<br><img id=Codehighlighter1_32_271_Open_Image onclick="this.style.display='none'; Codehighlighter1_32_271_Open_Text.style.display='none'; Codehighlighter1_32_271_Closed_Image.style.display='inline'; Codehighlighter1_32_271_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_32_271_Closed_Image onclick="this.style.display='none'; Codehighlighter1_32_271_Closed_Text.style.display='none'; Codehighlighter1_32_271_Open_Image.style.display='inline'; Codehighlighter1_32_271_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_32_271_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_32_271_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;std::cout&#160;</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Enter&#160;You&#160;Name:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">&#160;std::endl;&#160;&#160;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里先输出一行信息</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&#160;&#160;&#160;&#160;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&#160;name[</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">];&#160;&#160;&#160;&#160;&#160;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义一个字符变量</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&#160;&#160;&#160;&#160;std::cin&#160;</span><span style="COLOR: #000000">>></span><span style="COLOR: #000000">&#160;name;&#160;&#160;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">将客户的输入输入到变量中</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&#160;&#160;&#160;&#160;std::cout&#160;</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">&#160;name&#160;</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&#160;Welecon&#160;to&#160;tiger's&#160;blog.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #000000"><<</span><span style="COLOR: #000000">&#160;std::endl;&#160;&#160;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&#160;&#160;&#160;&#160;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&#160;&#160;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">控制在最后暂停</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&#160;&#160;&#160;&#160;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&#160;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
&#160;&#160;&#160;&#160;&#160;&#160; &#8220;<<&#8221;：输出操作符。接受2个操作数，左操作数必须是ostream对象，右操作数是要输出的值。<br>&#160;&#160;&#160;&#160;&#160;&#160; &#8220;>>&#8221;：输入操作符。同上，左操作数必须是istream对象，右操作数是保存输入结构的对象。<br>&#160;&#160;&#160; 3、注释<br>&#160;&#160;&#160;&#160;&#160;&#160; &#8220;//&#8221;：单行注释；&#8220;/*...*/&#8221;：多行注释。注意，注释中不能嵌套。 <br>&#160;&#160;&#160; 4、控制语句<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; while、for、if三个。while是可以设置无穷循环的，而for则是有限循环中用到的；if是用于判断中的。<br>&#160;&#160;&#160;&#160;5、类<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; 类的名称、成员变量、成员函数。<br>&#160;&#160;&#160; 6、其他<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160; 对应std::cin >> i 这个语句，它返回的是个cin的操作符，即对于while (std::cin >> i) 的这个循环中，验证的是cin这个对象，如果遇到文件结束符或无效输入时，这个cin对象是无效的，这while判断中就是false。<br>
  <img src ="http://www.cppblog.com/tiger7/aggbug/112208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tiger7/" target="_blank">tiger7</a> 2010-04-17 01:01 <a href="http://www.cppblog.com/tiger7/articles/112208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ Primer 学习笔记</title><link>http://www.cppblog.com/tiger7/articles/112205.html</link><dc:creator>tiger7</dc:creator><author>tiger7</author><pubDate>Sat, 10 Apr 2010 16:50:00 GMT</pubDate><guid>http://www.cppblog.com/tiger7/articles/112205.html</guid><wfw:comment>http://www.cppblog.com/tiger7/comments/112205.html</wfw:comment><comments>http://www.cppblog.com/tiger7/articles/112205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tiger7/comments/commentRss/112205.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tiger7/services/trackbacks/112205.html</trackback:ping><description><![CDATA[新买了本C++ Primer的书（虽然是D，呵呵），开始学习C++，开始做做笔记。 代码主要是在VS205上编译运行的。
 <img src ="http://www.cppblog.com/tiger7/aggbug/112205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tiger7/" target="_blank">tiger7</a> 2010-04-11 00:50 <a href="http://www.cppblog.com/tiger7/articles/112205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>