测试代码分析

作者在 2009-09-21 22:50:21 发布以下内容
int main()
{
   char *p = "zhdasdad111";
   char *s = calloc(1,20);
   char *str = realloc(s,12000);

   strcpy(s,p);
   printf("%s\n",p);
   printf("%s\n",s);

   return(0);
}
用此可以发现重新使用realloc重分配空间后会把原来的字符串复制到新的空间
基础知识 | 阅读 1108 次
文章评论,共6条
vfdff(作者)
2009-09-21 22:52
1
printf(&quot;%d,%u\n&quot;,(signed)0xffffffff,(signed)0xffffffff);<br />
&nbsp;&nbsp;&nbsp;printf(&quot;%d,%u\n&quot;,(unsigned)0xffffffff,(unsigned)0xffffffff);<br />
测试可以发现 printf默认的 %d是按照int类型输出的,而%u则使用的是unsigned int类型
vfdff(作者)
2009-09-21 22:55
2
void f1(int k,int(*pf)())<br />
{<br />
&nbsp;&nbsp;&nbsp; printf(&quot;%p\n&quot;,pf);<br />
&nbsp;&nbsp;&nbsp; (*pf)(50+k);<br />
&nbsp;&nbsp;&nbsp; pf(60+k);<br />
}<br />
void callback(int value)<br />
{<br />
&nbsp;&nbsp;&nbsp; printf(&quot;%d\n&quot;,value);<br />
}<br />
<br />
int main() <br />
{<br />
&nbsp;&nbsp;&nbsp;f1(88,&amp;callback);<br />
&nbsp;&nbsp;&nbsp;f1(88,callback);<br />
&nbsp;&nbsp;&nbsp;return(0);<br />
}<br />
使用 f1(88,&amp;callback);和 f1(88,callback);均可,说明函数名本身就是一个常指针
vfdff(作者)
2009-09-21 23:04
3
#include &lt;stdio.h&gt;<br />
#include &lt;string.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
<br />
struct Test{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Test(int){}<br />
&nbsp;&nbsp;&nbsp;&nbsp;Test(){}<br />
&nbsp;&nbsp;&nbsp;&nbsp;void fun() {}<br />
};<br />
<br />
int main() <br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Test a(1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;a.fun();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Test b();<br />
&nbsp;&nbsp;&nbsp;&nbsp;b.fun;<br />
<br />
&nbsp;&nbsp;&nbsp;return(0);<br />
}可以,而<br />
class Test{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Test(int){}<br />
&nbsp;&nbsp;&nbsp;&nbsp;Test(){}<br />
&nbsp;&nbsp;&nbsp;&nbsp;void fun() {}<br />
};不可以说明确实struct和class仅仅在默认访问权限的区别
vfdff(作者)
2009-09-21 23:13
4
#include &lt;iostream&gt;<br />
#include &lt;vector&gt;<br />
using namespace std;<br />
<br />
int main()<br />
{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;int&gt; ivec;<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;int&gt;::iterator it;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.push_back(3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;it=(vector&lt;int&gt;::iterator)&amp;ivec[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;it=ivec.begin();<br />
&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;*it&lt;&lt;endl;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;&nbsp;&nbsp;&nbsp;&nbsp;<br />
}<br />
说明在容器不为空时&nbsp;&nbsp;<br />
it=(vector&lt;int&gt;::iterator)&amp;ivec[0];和it=ivec.begin();一致<br />
但是在容器为空时 it=ivec.begin();有意义,而it=(vector&lt;int&gt;::iterator)&amp;ivec[0];不允许
vfdff(作者)
2009-09-21 23:22
5
#include &lt;iostream&gt;<br />
#include &lt;vector&gt;<br />
using namespace std;<br />
<br />
int main()<br />
{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;int&gt; ivec;<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;int&gt;::iterator it,it2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.push_back(1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.push_back(2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.push_back(3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.push_back(4);<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.push_back(5);<br />
&nbsp;&nbsp;&nbsp;&nbsp;it=(vector&lt;int&gt;::iterator)&amp;ivec[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;it=ivec.begin();<br />
&nbsp;&nbsp;&nbsp;&nbsp;it2 = it;<br />
&nbsp;&nbsp;&nbsp;&nbsp;it++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;*it&lt;&lt;endl;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;&nbsp;&nbsp;&nbsp;&nbsp;<br />
}《程序员面试宝典》p101 说明迭代器it2是一个指针,而非引用,所以在 it2 = it;指向了it后,修改it不会影响it2
vfdff(作者)
2009-09-21 23:31
6
#include &lt;iostream&gt;<br />
#include &lt;vector&gt;<br />
using namespace std;<br />
<br />
int main()<br />
{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;int&gt; ivec;<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;int&gt;::iterator it,it2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;int&gt;::iterator start1,start2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.push_back(1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.push_back(2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.push_back(3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.push_back(4);<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.push_back(5);<br />
&nbsp;&nbsp;&nbsp;&nbsp;it=(vector&lt;int&gt;::iterator)&amp;ivec[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;it=ivec.begin();<br />
&nbsp;&nbsp;&nbsp;&nbsp;start1 = ivec.begin();<br />
&nbsp;&nbsp;&nbsp;&nbsp;it2 = it;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.erase(it2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;start2 = ivec.begin();<br />
&nbsp;&nbsp;&nbsp;&nbsp;it++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ivec.erase(it2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;*it&lt;&lt;endl;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;&nbsp;&nbsp;&nbsp;&nbsp;<br />
}说明ivec.erase(it2);操作会把ivec在it2之后的所有因素前移
游客请输入验证码
浏览1936638次