﻿<?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++博客-chenglong7997-随笔分类-Expert_C_programming</title><link>http://www.cppblog.com/chenglong7997/category/19511.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 24 Jun 2012 16:02:53 GMT</lastBuildDate><pubDate>Sun, 24 Jun 2012 16:02:53 GMT</pubDate><ttl>60</ttl><item><title>chapter 10（再论指针）</title><link>http://www.cppblog.com/chenglong7997/archive/2012/06/23/179854.html</link><dc:creator>Snape</dc:creator><author>Snape</author><pubDate>Fri, 22 Jun 2012 21:02:00 GMT</pubDate><guid>http://www.cppblog.com/chenglong7997/archive/2012/06/23/179854.html</guid><wfw:comment>http://www.cppblog.com/chenglong7997/comments/179854.html</wfw:comment><comments>http://www.cppblog.com/chenglong7997/archive/2012/06/23/179854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenglong7997/comments/commentRss/179854.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenglong7997/services/trackbacks/179854.html</trackback:ping><description><![CDATA[知识点：<br /><br />1。多维数组的单个元素的存储和引用实际上是以线性 形式排列在内存中的。<br /><br />2.使用指针向一个函数传递一个多维数组。<br />myfunction(int my_array[][20]);<br /><br />myfunction(char **my_array);<br />参数必须是指针数组，而且必须是指向字符串的指针数组。<br /><br />char_array[rowsize *i +j]=....<br />将二位数组转换成以为数组 &nbsp;<img src ="http://www.cppblog.com/chenglong7997/aggbug/179854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenglong7997/" target="_blank">Snape</a> 2012-06-23 05:02 <a href="http://www.cppblog.com/chenglong7997/archive/2012/06/23/179854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>chapter 9（再论数组）</title><link>http://www.cppblog.com/chenglong7997/archive/2012/06/23/179845.html</link><dc:creator>Snape</dc:creator><author>Snape</author><pubDate>Fri, 22 Jun 2012 18:59:00 GMT</pubDate><guid>http://www.cppblog.com/chenglong7997/archive/2012/06/23/179845.html</guid><wfw:comment>http://www.cppblog.com/chenglong7997/comments/179845.html</wfw:comment><comments>http://www.cppblog.com/chenglong7997/archive/2012/06/23/179845.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenglong7997/comments/commentRss/179845.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenglong7997/services/trackbacks/179845.html</trackback:ping><description><![CDATA[知识点：<br /><br />1.数组和指针。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;&lt;stdio.h&gt;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;&lt;stdlib.h&gt;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;test(<span style="color: #0000FF; ">int</span>&nbsp;arr[])<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("In&nbsp;Func:&nbsp;size&nbsp;of&nbsp;the&nbsp;array&nbsp;is&nbsp;%d\n",&nbsp;<span style="color: #0000FF; ">sizeof</span>(arr)&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">4&nbsp;the&nbsp;pointer's&nbsp;size</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #008000; "></span>}<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;test_char(<span style="color: #0000FF; ">char</span>&nbsp;arr[])<br /><span style="color: #008080; ">10</span>&nbsp;{<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("In&nbsp;Func:&nbsp;sizeof&nbsp;the&nbsp;my_char&nbsp;is&nbsp;%d\n",&nbsp;<span style="color: #0000FF; ">sizeof</span>(arr));&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">4&nbsp;the&nbsp;pointer's&nbsp;size</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;printf("In&nbsp;Func:&nbsp;strlen&nbsp;the&nbsp;my_char&nbsp;is&nbsp;%d\n",&nbsp;strlen(arr));&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">11&nbsp;the&nbsp;string's&nbsp;size</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #008000; "></span>}<br /><span style="color: #008080; ">14</span>&nbsp;<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()<br /><span style="color: #008080; ">16</span>&nbsp;{<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;array[100]={1,3,4,5};<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;my_char[50]="hello&nbsp;world";<br /><span style="color: #008080; ">19</span>&nbsp;<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("In&nbsp;Main:&nbsp;sizeof&nbsp;the&nbsp;array&nbsp;is&nbsp;%d\n",&nbsp;<span style="color: #0000FF; ">sizeof</span>(&nbsp;array)&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">400</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; "></span><br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("In&nbsp;Main:&nbsp;sizeof&nbsp;the&nbsp;my_char&nbsp;is&nbsp;%d\n",&nbsp;<span style="color: #0000FF; ">sizeof</span>(my_char));&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">50</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;printf("In&nbsp;Main:&nbsp;strlen&nbsp;the&nbsp;my_char&nbsp;is&nbsp;%d\n",&nbsp;strlen(my_char));&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">11&nbsp;the&nbsp;string's&nbsp;size</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #008000; "></span><br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test(array);<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test_char(my_char);<br /><span style="color: #008080; ">27</span>&nbsp;}</div>C语言允许把形参声明为数组，或者指针。编译器知道何时形参是作为数组声明的，但事实上在函数的内部，<span style="color: red; ">编译器始终把它当做指向数组第一个元素的指针。<br />（也因为如此，这个指针的地址，与数组第一个元素的地址不相同。）<br /></span>因此，但test和test_char函数中，sizeof（pointer）的大小都是4，为指针的大小。<br />也因此，只能传给函数，数组的大小，因为无法用sizeof推出数组的大小。<br /><br />2.有一种操作只能在指针里进行，而无法在数组中进行，就是修改它的值。<br />数组名是不可修改的左值，他的值是不能改变的。也可看做常量指针。<br /><br />3.数组和指针的可交换性总结<br />用a[i]这样的形式对数组进行访问，总是被编译器&#8220;改写&#8221;成*(a+i)这样的指针访问<br />指针始终就是指针。它绝不可以改写成数组。你可以用下标形式访问指针，一般都是指针作为函数参数时候，而且你知道实际传递给函数的就是一个数组<br />在特定上下文中，也就是作为函数的参数，一个数组的声明，可依看做是一个指针。作为函数参数的数组，始终会被编译器改成指向数组的第一个元素的指针。<br />当把一个数组定义为函数的参数时候，可以选择定义为数组，也可以定义为指针，不管用哪种方法，在函数内部事实上获得的就是一个指针<br />在其他所有情况，定义和声明必须相匹配。如果定义了一个数组，在其他文件中对它进行声明时候，也必须把他声明为数组。指针也是一样。<br /><br />4.数组名与数组一个元素， 与作为参数时，被编译器转换为的指针的关系。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;&lt;stdio.h&gt;<br />#include&nbsp;&lt;stdlib.h&gt;<br /><br /><br /><span style="color: #0000FF; ">void</span>&nbsp;test_char(<span style="color: #0000FF; ">char</span>&nbsp;arr[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("In&nbsp;test_char()<img src="http://www.cppblog.com/Images/dot.gif" alt="" />.\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("addr&nbsp;of&nbsp;array&nbsp;param&nbsp;=&nbsp;%#x&nbsp;\n",&nbsp;&amp;arr);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("content&nbsp;of&nbsp;array&nbsp;param&nbsp;=&nbsp;%#x&nbsp;\n",&nbsp;arr);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("addr&nbsp;of&nbsp;(arr[0])&nbsp;=&nbsp;%#x&nbsp;\n",&nbsp;&amp;arr[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("addr&nbsp;of&nbsp;(arr[1])&nbsp;=&nbsp;%#x&nbsp;\n",&nbsp;&amp;arr[1]);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("++arr&nbsp;=&nbsp;%#x&nbsp;\n",&nbsp;++arr);<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">int&nbsp;array[100]={1,3,4,5};</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;my_char[50]="hello&nbsp;world";<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf("addr&nbsp;of&nbsp;array&nbsp;head&nbsp;%x\n",&nbsp;&amp;my_char);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("addr&nbsp;of&nbsp;my_char[0]&nbsp;%x\n",&nbsp;&amp;(my_char[0]));<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("addr&nbsp;of&nbsp;my_char[1]&nbsp;%x\n",&nbsp;&amp;(my_char[1]));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">test(array);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;test_char(my_char);<br />}</div><br /><br />结果：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->addr&nbsp;of&nbsp;array&nbsp;head&nbsp;bf8c0dfa<br />addr&nbsp;of&nbsp;my_char[0]&nbsp;bf8c0dfa<br />addr&nbsp;of&nbsp;my_char[1]&nbsp;bf8c0dfb<br />In&nbsp;test_char()<img src="http://www.cppblog.com/Images/dot.gif" alt="" />.<br />addr&nbsp;of&nbsp;array&nbsp;param&nbsp;=&nbsp;0xbf8c0de0&nbsp;<br />content&nbsp;of&nbsp;array&nbsp;param&nbsp;=&nbsp;0xbf8c0dfa&nbsp;<br />addr&nbsp;of&nbsp;(arr[0])&nbsp;=&nbsp;0xbf8c0dfa&nbsp;<br />addr&nbsp;of&nbsp;(arr[1])&nbsp;=&nbsp;0xbf8c0dfb&nbsp;<br />++arr&nbsp;=&nbsp;0xbf8c0dfb&nbsp;</div><br />结果说明：<br />数组名的地址与数组第一个元素的地址是相同的。<span style="color: red; ">因此数组名不是第一个元素的指针，而是第一个元素，除了它不能直接取出第一个元素。<br /></span>在test_char 函数中。<span style="color: red; ">参数的地址与数组第一个元素的地址不同，而参数的内容是第一个元素的地址</span>。说明编译器确实用指针实现了数组的访问。指针++后，指向数组下一个元素。<br /><br /><br /><br /><br /><br /><img src ="http://www.cppblog.com/chenglong7997/aggbug/179845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenglong7997/" target="_blank">Snape</a> 2012-06-23 02:59 <a href="http://www.cppblog.com/chenglong7997/archive/2012/06/23/179845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>chapter 4（数组和指针不同的情况）</title><link>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179562.html</link><dc:creator>Snape</dc:creator><author>Snape</author><pubDate>Wed, 20 Jun 2012 22:07:00 GMT</pubDate><guid>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179562.html</guid><wfw:comment>http://www.cppblog.com/chenglong7997/comments/179562.html</wfw:comment><comments>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenglong7997/comments/commentRss/179562.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenglong7997/services/trackbacks/179562.html</trackback:ping><description><![CDATA[1.指针与数组并不相同。<br />定义会分配内存。声明不会。<br />声明与定义应该相配。<img src ="http://www.cppblog.com/chenglong7997/aggbug/179562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenglong7997/" target="_blank">Snape</a> 2012-06-21 06:07 <a href="http://www.cppblog.com/chenglong7997/archive/2012/06/21/179562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>chapter 3（声明）</title><link>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179561.html</link><dc:creator>Snape</dc:creator><author>Snape</author><pubDate>Wed, 20 Jun 2012 21:39:00 GMT</pubDate><guid>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179561.html</guid><wfw:comment>http://www.cppblog.com/chenglong7997/comments/179561.html</wfw:comment><comments>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179561.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenglong7997/comments/commentRss/179561.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenglong7997/services/trackbacks/179561.html</trackback:ping><description><![CDATA[知识点：<br /><br />1.int 变量跟只包含一个int 成员的结构变量，在传递参数的方式可能完全不同。一个 int参数一般会传递到寄存器中，而结构参数很可能被传递到堆栈中。<br /><br />2.在结构中放置数组，可以讲数组当做第一等级类型，用赋值语句拷贝整个数组。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">struct</span>&nbsp;s_tag&nbsp;{<span style="color: #0000FF; ">int</span>&nbsp;a[100];};<br /><span style="color: #0000FF; ">struct</span>&nbsp;s_tag&nbsp;orange,&nbsp;lime;<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i=0;&nbsp;i&lt;100;&nbsp;i++)&nbsp;lime.a[i]=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;orange=lime;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">对整个结构赋值</span><br />}</div><br />3.union<br />为了节省空间<br />为了把一个数据解释为两种不同的东西。<br /><br />4.enum<br />#define定义的名字一般在编译时期被丢弃，而枚举名字则通常一直在调试器中可见。可以再调试代码的时候看见他们。<br /><br />5.typedef int x[10] 与 #define x int[10]区别<br />可以用其他类型说明符对宏类型名进行扩展<span style="color: red; ">，但是不能对type的饭定义的类型名</span>，进行扩展<br />#define peach int<br />unsigned peach i;//right<br /><br />typedef int banana;<br />unsigned banana i;//error<br /><br />在连续几个变量声明中，用typedef定义的类型能够保证声明中<span style="color: red; ">所有变量均为同一种类型</span>，但是#define定义的类型不能保证。<br /><br />#define int_ptr int*;<br />int_ptr chalk, cheese;<br />结果：int * chalk, cheese;(他们两个类型不同)<br /><br />#typedef char* char_ptr<br />char_ptr ben, rool(两个都是指向char的指针)<br /><br /><br />6. 不要为了方便对结构使用typedef，虽然可以省去struct但是省去了提示信息。<br />用在数组，结构，指针，以及函数的组合类型。结构标签可以添加&#8220;_tag&#8221;结尾。<br /><img src ="http://www.cppblog.com/chenglong7997/aggbug/179561.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenglong7997/" target="_blank">Snape</a> 2012-06-21 05:39 <a href="http://www.cppblog.com/chenglong7997/archive/2012/06/21/179561.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>chapter 2（bugs）</title><link>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179559.html</link><dc:creator>Snape</dc:creator><author>Snape</author><pubDate>Wed, 20 Jun 2012 20:26:00 GMT</pubDate><guid>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179559.html</guid><wfw:comment>http://www.cppblog.com/chenglong7997/comments/179559.html</wfw:comment><comments>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenglong7997/comments/commentRss/179559.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenglong7997/services/trackbacks/179559.html</trackback:ping><description><![CDATA[知识点：<br /><br />1.malloc（strlen（str）） 几乎肯定是错误的。应该是&nbsp;malloc（strlen（str）+1）。<br /><br />2.NUL用于结束一个ACSII字符串。NULL表示什么也不指向。空指针。<br /><br />3.switch中default写成defau1t的错误。（能够通过编译）。<br />break会跳出最近的那层循环，或者switch语句<br /><br />4.ANSI C 相邻的字符串常量<span style="color: red; ">会被自动合并成一</span>个字符串的约定。<br />printf("a second favorite children's book"<br />"is 'yitiantulong' "<br />);<br />编译时候会自动合并，除了最后字符串外，每个字符串结尾的&#8216;\0&#8217;会被删除。<br />bug：<br />char *resourse[]={<br />"big disk",<br />"color" &nbsp; //color 之后没有写逗号，那么会和mouse连接在一起。<br />"mouse",<br />};<br /><br />5.<span style="color: red; ">代码第一次执行时候行为，与以后执行的不同。</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->initializer(&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*str)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;separator='';<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("&nbsp;%c&nbsp;%s&nbsp;\n",&nbsp;separator,&nbsp;str);<br />&nbsp; &nbsp; separator=',';<br />}</div>非常简便，比起其他的方法。<br /><br />6.extern用于函数定义，表示全局可见。（属于冗余）<br />extern用于标量，表示在其他地方定义。<br /><br />7.x=f() * g();<br />f() 与个g() 调动顺序不确定。<br /><br />8.空格<br />\newline 与 \ newline意义不同。<br /><br />9.<span style="color: red; ">调用函数分配内存来保存函数的返回值。</span>可以返回字符串常量的指针，静态数组的指针，动态内存指针。<br /><img src ="http://www.cppblog.com/chenglong7997/aggbug/179559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenglong7997/" target="_blank">Snape</a> 2012-06-21 04:26 <a href="http://www.cppblog.com/chenglong7997/archive/2012/06/21/179559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>chapter 1（历史问题）</title><link>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179558.html</link><dc:creator>Snape</dc:creator><author>Snape</author><pubDate>Wed, 20 Jun 2012 20:03:00 GMT</pubDate><guid>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179558.html</guid><wfw:comment>http://www.cppblog.com/chenglong7997/comments/179558.html</wfw:comment><comments>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenglong7997/comments/commentRss/179558.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenglong7997/services/trackbacks/179558.html</trackback:ping><description><![CDATA[知识点：<br /><br />1.float不会被自动扩展为double。 在ANSI C中<br /><br />2.宏所接受参数类型可以不同。 最好只用于命名常量和为结构提供简洁记法。<br /><br />3.操作符左右最好用空格分开。防止古老版本的程序，会修改赋值符的位置。<br /><br />4.在limits.h中有INT_MAX， LONG_MAX定义<br /><br />5.类型不兼容。因为两个指针所指对象不同。而不是修饰符不同<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->foo&nbsp;(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;**p)&nbsp;{}<br />&nbsp;<br /><span style="color: #0000FF; ">int</span>&nbsp;main(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;**argv)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foo(argv);<br />}</div><br />6.K&amp;R C 和 ANSI C对待无符号数原则不同<br />K&amp;R C 使用无符号保留的原则。<br />ANSI C 使用值保留的原则。（整数如果转换为signed不会丢失信息，就转换为signed，否则转换为unsigned）<br />经过gcc中测试，采用的是ANSI C的原则<br /><br />7.尽量不要在代码中使用无符号数，以避免增加不必要的复杂性。不要仅仅因为无符号数不存在负值（如年龄），就用它来表示数量。<br />只有在使用<span style="color: red; ">位段和二进制掩码</span>时候，才可以用无符号数。在表达式中使用<span style="color: red; ">强制转换，是操作数均为有符号或者无符号数</span>，这样就不必由编译器选择结果的类型。<br /><br /><br /><img src ="http://www.cppblog.com/chenglong7997/aggbug/179558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenglong7997/" target="_blank">Snape</a> 2012-06-21 04:03 <a href="http://www.cppblog.com/chenglong7997/archive/2012/06/21/179558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>forward</title><link>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179554.html</link><dc:creator>Snape</dc:creator><author>Snape</author><pubDate>Wed, 20 Jun 2012 19:39:00 GMT</pubDate><guid>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179554.html</guid><wfw:comment>http://www.cppblog.com/chenglong7997/comments/179554.html</wfw:comment><comments>http://www.cppblog.com/chenglong7997/archive/2012/06/21/179554.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chenglong7997/comments/commentRss/179554.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chenglong7997/services/trackbacks/179554.html</trackback:ping><description><![CDATA[知识点：<br /><br />1.if(3==i)<br />最好用这种方式，避免少写一个=<br /><br />2.time_t在/user/include/time.h中，用一个long来表示。因此最大值为0x7FFFFFFF（有符号数）；<br />或者用biggest=(long)(pow (2, sizeof(long)*8)-1 );来获取最大值。<br />之后用gmtime， asctime函数获取最大时间<br /><br />结果：<br />Tue Jan 19 03:14:07 2038<img src ="http://www.cppblog.com/chenglong7997/aggbug/179554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chenglong7997/" target="_blank">Snape</a> 2012-06-21 03:39 <a href="http://www.cppblog.com/chenglong7997/archive/2012/06/21/179554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>