﻿<?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++博客-空气稀薄-文章分类-C/C++</title><link>http://www.cppblog.com/GuiQuan/category/7993.html</link><description>温故而知新 -- 数学\C\C++\C#</description><language>zh-cn</language><lastBuildDate>Fri, 22 Aug 2008 05:30:10 GMT</lastBuildDate><pubDate>Fri, 22 Aug 2008 05:30:10 GMT</pubDate><ttl>60</ttl><item><title>2.关键字：auto、static、register、const、volatile 、extern 总结</title><link>http://www.cppblog.com/GuiQuan/articles/58903.html</link><dc:creator>空气稀薄</dc:creator><author>空气稀薄</author><pubDate>Thu, 14 Aug 2008 16:57:00 GMT</pubDate><guid>http://www.cppblog.com/GuiQuan/articles/58903.html</guid><wfw:comment>http://www.cppblog.com/GuiQuan/comments/58903.html</wfw:comment><comments>http://www.cppblog.com/GuiQuan/articles/58903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/GuiQuan/comments/commentRss/58903.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/GuiQuan/services/trackbacks/58903.html</trackback:ping><description><![CDATA[<div>
<h3>auto </h3>
　　这个这个关键字用于声明变量的生存期为自动，即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量，而在函数中定义的变量视为局部变量。这个关键字不怎么多写，因为所有的变量默认就是auto的。
<h3>register </h3>
　　这个关键字命令编译器<font color=red>尽可能</font>的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。
<h3>static </h3>
　　常见的两种用途: <br>　　　　1&gt;统计函数被调用的次数; <br>　　　　2&gt;减少局部数组建立和赋值的开销.变量的建立和赋值是需要一定的处理器开销的，特别是数组等含有较多元素的存储类型。在一些含有较多的变量并且被经常调用的函数中，可以将一些数组声明为static类型，以减少建立或者初始化这些变量的开销.
<p>　　详细说明: <br>　　　　1&gt;、变量会被放在程序的全局存储区中，这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 <br>　　　　2&gt;、变量用static告知编译器，自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。 <br>　　　　<font color=red>3&gt;当static用来修饰全局变量时，它就改变了全局变量的作用域，使其不能被别的程序extern，限制在了当前文件里，但是没有改变其存放位置，还是在全局静态储存区。</font>
<p>　　使用注意: <br>　　　　1&gt;若全局变量仅在单个C文件中访问，则可以将这个变量修改为静态全局变量，以降低模块间的耦合度； <br>　　　　2&gt;若全局变量仅由单个函数访问，则可以将这个变量改为该函数的静态局部变量，以降低模块间的耦合度； <br>　　　　3&gt;设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时，需要考虑重入问题(只要输入数据相同就应产生相同的输出)。
<h3>const </h3>
　　被const修饰的东西都受到强制保护，可以预防意外的变动，能提高程序的健壮性。它可以修饰函数的参数、返回值，甚至函数的定义体。
<p>　　作用: <br>　　　　1&gt;修饰输入参数 <br>　　　　　　a.对于非内部数据类型的输入参数，应该将&#8220;值传递&#8221;的方式改为&#8220;const引用传递&#8221;，目的是提高效率。例如将void Func(A a) 改为void Func(const A &amp;a)。 <br>　　　　　　b.对于内部数据类型的输入参数，不要将&#8220;值传递&#8221;的方式改为&#8220;const引用传递&#8221;。否则既达不到提高效率的目的，又降低了函数的可理解性。例如void Func(int x) 不应该改为void Func(const int &amp;x)。 <br>　　　　2&gt;用const修饰函数的返回值 <br>　　　　　　a.如果给以&#8220;指针传递&#8221;方式的函数返回值加const修饰，那么函数返回值（即指针）的内容不能被修改，该返回值只能被赋给加const修饰的同类型指针。 <br>　　　　　　　如对于： const char * GetString(void); <br>　　　　　　　如下语句将出现编译错误： <br>　　　　　　 　char *str = GetString();//cannot convert from 'const char *' to 'char *'； <br>　　　　　　　正确的用法是： <br>　　　　　　　const char *str = GetString(); <br>　　　　　　b.如果函数返回值采用&#8220;值传递方式&#8221;，由于函数会把返回值复制到外部临时的存储单元中，加const修饰没有任何价值。 如不要把函数int GetInt(void) 写成const int GetInt(void)。 <br>　　　　3&gt;const成员函数的声明中，const关键字只能放在函数声明的尾部,表示该类成员不修改对象.
<p>　　　说明： <br>　　　　const type m; //修饰m为不可改变 <br>　　　示例： <br>　　　　typedef char * pStr; //新的类型pStr; <br>　　　　char string[4] = "abc"; <br>　　　　const char *p1 = string； <br>　　　　p1++; //正确，上边修饰的是*p1,p1可变 <br>　　　　const pStr p2 = string; <br>　　　　p2++; //错误，上边修饰的是p2，p2不可变,*p2可变 <br>　　　同理，const修饰指针时用此原则判断就不会混淆了。 <br>　　　　const int *value; //*value不可变，value可变 <br>　　　　int* const value; //value不可变，*value可变 <br>　　　　const (int *) value; //(int *)是一种type,value不可变,*value可变 <br>　　　　　　　　　　　　　　//逻辑上这样理解，编译不能通过，需要tydef int* NewType; <br>　　　　const int* const value;//*value,value都不可变
<h3>volatile </h3>
　　表明某个变量的值可能在外部被改变，优化器在用到这个变量时必须每次都小心地重新读取这个变量的值，而不是使用保存在寄存器里的备份。它可以适用于基础类型如：int,char,long......也适用于C的结构和C++的类。当对结构或者类对象使用volatile修饰的时候，结构或者类的所有成员都会被视为volatile. <br>　　该关键字在多线程环境下经常使用，因为在编写多线程的程序时，同一个变量可能被多个线程修改，而程序通过该变量同步各个线程。 <br>　　简单示例： <br>　　　DWORD __stdcall threadFunc(LPVOID signal) <br>　　　{ <br>　　　　　int* intSignal=reinterpret_cast(signal); <br>　　　　　*intSignal=2; <br>　　　　　while(*intSignal!=1) <br>　　　　　sleep(1000); <br>　　　　　return 0; <br>　　　} <br>　　该线程启动时将intSignal 置为2，然后循环等待直到intSignal 为1 时退出。显然intSignal的值必须在外部被改变，否则该线程不会退出。但是实际运行的时候该线程却不会退出，即使在外部将它的值改为1，看一下对应的伪汇编代码就明白了： <br>　　　　　mov ax,signal <br>　　　　　label: <br>　　　　　if(ax!=1) <br>　　　　　goto label <br>　　对于C编译器来说，它并不知道这个值会被其他线程修改。自然就把它cache在寄存器里面。C 编译器是没有线程概念的,这时候就需要用到volatile。volatile 的本意是指：这个值可能会在当前线程外部被改变。也就是说，我们要在threadFunc中的intSignal前面加上volatile关键字，这时候，编译器知道该变量的值会在外部改变，因此每次访问该变量时会重新读取，所作的循环变为如下面伪码所示： <br>　　　　　label: <br>　　　　　mov ax,signal <br>　　　　　if(ax!=1) <br>　　　　　goto label
<p>　　<font color=red>注意：</font>一个参数既可以是const同时是volatile，是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。
<h3>extern </h3>
　　extern 意为&#8220;外来的&#8221;&#183;&#183;&#183;它的作用在于告诉编译器：有这个变量，它可能不存在当前的文件中，但它肯定要存在于工程中的某一个源文件中或者一个Dll的输出中。</div>
<img src ="http://www.cppblog.com/GuiQuan/aggbug/58903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/GuiQuan/" target="_blank">空气稀薄</a> 2008-08-15 00:57 <a href="http://www.cppblog.com/GuiQuan/articles/58903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>1.数据类型</title><link>http://www.cppblog.com/GuiQuan/articles/58676.html</link><dc:creator>空气稀薄</dc:creator><author>空气稀薄</author><pubDate>Wed, 13 Aug 2008 00:31:00 GMT</pubDate><guid>http://www.cppblog.com/GuiQuan/articles/58676.html</guid><wfw:comment>http://www.cppblog.com/GuiQuan/comments/58676.html</wfw:comment><comments>http://www.cppblog.com/GuiQuan/articles/58676.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/GuiQuan/comments/commentRss/58676.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/GuiQuan/services/trackbacks/58676.html</trackback:ping><description><![CDATA[一、基本类型<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;整型类型：常量 八进制012、十进制10和十六进制0xA<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;变量 short、int和long (short 占两个字节，int 和 long占四个字节)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;实数类型：常量 <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">十进制</span><span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">5.678</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">和指数形式</span><span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">567.8E-2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 变量 float和double (float 占四个字节，double占八个字节)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符类型： 常量&nbsp; 'g'、'我'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;变量 char和wchar_t (char占一个字节，wchar_t占两个字节)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符串型： 常量 "How are you?"&nbsp; =&gt;&nbsp; 'H' 'o' ................'?' '\n' (C语言字符串表示方法char[])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">符号常量：#define PI 3.14159<br>二、构造类型<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数组：int lstCount[10];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 自定义类型：<span>class Tag_CTag{int intCount; char name[20]} CCar;</span>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>struct Tag_Car{int intCount; char name[20]} Car;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">联合</span><span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"> unit Sale{ int intCount; char name[20]};&nbsp; //</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">同用一块最大限度的内存块</span></span></p>
<p dir=ltr style="MARGIN-RIGHT: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>指针类型：</span><span>int *pCount;</span></span></span> <br>三、修辞符<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signed unsigned 有无符号 (数值类修辞符)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp; long&nbsp; 长短型整数 (int类型修辞符)</p>
<img src ="http://www.cppblog.com/GuiQuan/aggbug/58676.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/GuiQuan/" target="_blank">空气稀薄</a> 2008-08-13 08:31 <a href="http://www.cppblog.com/GuiQuan/articles/58676.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C/C++头文件一览</title><link>http://www.cppblog.com/GuiQuan/articles/58675.html</link><dc:creator>空气稀薄</dc:creator><author>空气稀薄</author><pubDate>Wed, 13 Aug 2008 00:09:00 GMT</pubDate><guid>http://www.cppblog.com/GuiQuan/articles/58675.html</guid><wfw:comment>http://www.cppblog.com/GuiQuan/comments/58675.html</wfw:comment><comments>http://www.cppblog.com/GuiQuan/articles/58675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/GuiQuan/comments/commentRss/58675.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/GuiQuan/services/trackbacks/58675.html</trackback:ping><description><![CDATA[<p>C、传统 C++<br><br>#include &lt;assert.h&gt;　　　　//设定插入点<br>#include &lt;ctype.h&gt;　　　　 //字符处理<br>#include &lt;errno.h&gt;　　　　 //定义错误码<br>#include &lt;float.h&gt;　　　　 //浮点数处理<br>#include &lt;fstream.h&gt;　　　 //文件输入／输出<br>#include &lt;iomanip.h&gt;　　　 //参数化输入／输出<br>#include &lt;iostream.h&gt;　　　//数据流输入／输出<br>#include &lt;limits.h&gt;　　　　//定义各种数据类型最值常量<br>#include &lt;locale.h&gt;　　　　//定义本地化函数<br>#include &lt;math.h&gt;　　　　　//定义数学函数<br>#include &lt;stdio.h&gt;　　　　 //定义输入／输出函数<br>#include &lt;stdlib.h&gt;　　　　//定义杂项函数及内存分配函数<br>#include &lt;string.h&gt;　　　　//字符串处理<br>#include &lt;strstrea.h&gt;　　　//基于数组的输入／输出<br>#include &lt;time.h&gt;　　　　　//定义关于时间的函数<br>#include &lt;wchar.h&gt;　　　　 //宽字符处理及输入／输出<br>#include &lt;wctype.h&gt;　　　　//宽字符分类<br><br>//////////////////////////////////////////////////////////////////////////<br><br>标准 C++　（同上的不再注释）<br><br>#include &lt;algorithm&gt;　　　 //STL 通用算法<br>#include &lt;bitset&gt;　　　　　//STL 位集容器<br>#include &lt;cctype&gt;<br>#include &lt;cerrno&gt;<br>#include &lt;clocale&gt;<br>#include &lt;cmath&gt;<br>#include &lt;complex&gt;　　　　 //复数类<br>#include &lt;cstdio&gt;<br>#include &lt;cstdlib&gt;<br>#include &lt;cstring&gt;<br>#include &lt;ctime&gt;<br>#include &lt;deque&gt;　　　　　 //STL 双端队列容器<br>#include &lt;exception&gt;　　　 //异常处理类<br>#include &lt;fstream&gt;<br>#include &lt;functional&gt;　　　//STL 定义运算函数（代替运算符）<br>#include &lt;limits&gt;<br>#include &lt;list&gt;　　　　　　//STL 线性列表容器<br>#include &lt;map&gt;　　　　　　 //STL 映射容器<br>#include &lt;iomanip&gt;<br>#include &lt;ios&gt;　　　　　　 //基本输入／输出支持<br>#include &lt;iosfwd&gt;　　　　　//输入／输出系统使用的前置声明<br>#include &lt;iostream&gt;<br>#include &lt;istream&gt;　　　　 //基本输入流<br>#include &lt;ostream&gt;　　　　 //基本输出流<br>#include &lt;queue&gt;　　　　　 //STL 队列容器<br>#include &lt;set&gt;　　　　　　 //STL 集合容器<br>#include &lt;sstream&gt;　　　　 //基于字符串的流<br>#include &lt;stack&gt;　　　　　 //STL 堆栈容器　　　　<br>#include &lt;stdexcept&gt;　　　 //标准异常类<br>#include &lt;streambuf&gt;　　　 //底层输入／输出支持<br>#include &lt;string&gt;　　　　　//字符串类<br>#include &lt;utility&gt;　　　　 //STL 通用模板类<br>#include &lt;vector&gt;　　　　　//STL 动态数组容器<br>#include &lt;cwchar&gt;<br>#include &lt;cwctype&gt;<br><br>using namespace std;<br><br>//////////////////////////////////////////////////////////////////////////<br><br>C99 增加<br><br>#include &lt;complex.h&gt;　　 //复数处理<br>#include &lt;fenv.h&gt;　　　　//浮点环境<br>#include &lt;inttypes.h&gt;　　//整数格式转换<br>#include &lt;stdbool.h&gt;　　 //布尔环境<br>#include &lt;stdint.h&gt;　　　//整型环境<br>#include &lt;tgmath.h&gt;　　　//通用类型数学宏</p>
<img src ="http://www.cppblog.com/GuiQuan/aggbug/58675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/GuiQuan/" target="_blank">空气稀薄</a> 2008-08-13 08:09 <a href="http://www.cppblog.com/GuiQuan/articles/58675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>