﻿<?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>博客园-大漠一抹云-最新评论</title><link>http://www.cnblogs.com/8586/CommentsRSS.aspx</link><description /><language>zh-cn</language><pubDate>Wed, 09 May 2012 20:41:08 GMT</pubDate><lastBuildDate>Wed, 09 May 2012 20:41:08 GMT</lastBuildDate><generator>cnblogs</generator><item><title>Re:c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2012/05/18/1499573.html#2380179</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Fri, 18 May 2012 10:22:37 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2012/05/18/1499573.html#2380179</guid><description><![CDATA[C++ 语言中，大多数类型都可用作容器的元素类型。容器元素类型必须满足
以下两个约束： 
•   元素类型必须支持赋值运算。 
•   元素类型的对象必须可以复制。<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2012-05-18 18:22 <a href="http://www.cnblogs.com/8586/archive/2012/05/18/1499573.html#2380179#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re: 动态创建一个CButton按钮并实现其ON_BN_CLICKED消息</title><link>http://www.cnblogs.com/8586/archive/2011/12/07/1307433.html#2264215</link><dc:creator>海雅儿</dc:creator><author>海雅儿</author><pubDate>Wed, 07 Dec 2011 08:37:42 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2011/12/07/1307433.html#2264215</guid><description><![CDATA[动态创建的button大多数不能确定IDC，如果不能的话，这组代码就不能用了吧<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">海雅儿</a> 2011-12-07 16:37 <a href="http://www.cnblogs.com/8586/archive/2011/12/07/1307433.html#2264215#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:解读工程 - 之困惑之处</title><link>http://www.cnblogs.com/8586/archive/2011/08/15/1275760.html#2176934</link><dc:creator>桑叶舟</dc:creator><author>桑叶舟</author><pubDate>Mon, 15 Aug 2011 02:23:10 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2011/08/15/1275760.html#2176934</guid><description><![CDATA[楼主，QQ多少？有些编译问题想请教你。<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">桑叶舟</a> 2011-08-15 10:23 <a href="http://www.cnblogs.com/8586/archive/2011/08/15/1275760.html#2176934#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:把mapinfo图层的经纬度信息导出来的办法</title><link>http://www.cnblogs.com/8586/archive/2011/05/30/2054901.html#2109914</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Mon, 30 May 2011 01:44:39 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2011/05/30/2054901.html#2109914</guid><description><![CDATA[精度不够<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2011-05-30 09:44 <a href="http://www.cnblogs.com/8586/archive/2011/05/30/2054901.html#2109914#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:软件崩溃后相关信息保存</title><link>http://www.cnblogs.com/8586/archive/2011/05/26/2059053.html#2107418</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Thu, 26 May 2011 09:52:48 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2011/05/26/2059053.html#2107418</guid><description><![CDATA[开源项目CrashReport也提供了一套异常处理与错误报告的解决方案，还附带了截屏、压缩log，上传log等功能：
http://code.google.com/p/crashrpt/


google也开源了一个类似的项目：breakpad
code.google.com/p/google-breakpad/ 
不过貌似我们的服务端都会进行加壳，这个对dump调试的影响会有多大？有了解的同学吗？

-&gt; 可以参考这个创新：
PDB文件不匹配时进行崩溃分析的解决方案
http://www.pc.nd/index.php?doc-view-6952-%E8%B0%83%E8%AF%95%2C<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2011-05-26 17:52 <a href="http://www.cnblogs.com/8586/archive/2011/05/26/2059053.html#2107418#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:指针参数是如何传递内存的？【高质量C++/C编程指南】</title><link>http://www.cnblogs.com/8586/archive/2011/05/15/1764900.html#2097355</link><dc:creator>KuPig</dc:creator><author>KuPig</author><pubDate>Sun, 15 May 2011 07:12:21 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2011/05/15/1764900.html#2097355</guid><description><![CDATA[free(str);释放后加一个str = null完美了.<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">KuPig</a> 2011-05-15 15:12 <a href="http://www.cnblogs.com/8586/archive/2011/05/15/1764900.html#2097355#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:VC2005:无法执行添加/移除操作,因为代码元素是只读的....多个解决办法 **输入无提示，解决办法（VA_X_Setup1649）</title><link>http://www.cnblogs.com/8586/archive/2011/03/29/1304547.html#2057523</link><dc:creator>jiftle</dc:creator><author>jiftle</author><pubDate>Tue, 29 Mar 2011 08:29:19 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2011/03/29/1304547.html#2057523</guid><description><![CDATA[其实只要关闭.h和.cpp文件就可以了<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">jiftle</a> 2011-03-29 16:29 <a href="http://www.cnblogs.com/8586/archive/2011/03/29/1304547.html#2057523#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:symbian搭建framework |Carbide C++常见问题集</title><link>http://www.cnblogs.com/8586/archive/2011/03/23/1984900.html#2052627</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Wed, 23 Mar 2011 03:34:19 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2011/03/23/1984900.html#2052627</guid><description><![CDATA[symbian 创建菜单，无法显示，可能出错地方：1.创建有问题，2.创建位置不对，可查看sizechange相关，3,组合控件，没有重写，virtual TInt					CountComponentControls() const;
	virtual CCoeControl*			ComponentControl(TInt aIndex) const;<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2011-03-23 11:34 <a href="http://www.cnblogs.com/8586/archive/2011/03/23/1984900.html#2052627#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:手工添加新类，调试的时候提示不是类或命名空间名称</title><link>http://www.cnblogs.com/8586/archive/2011/01/13/1245320.html#2010058</link><dc:creator>u9wow</dc:creator><author>u9wow</author><pubDate>Thu, 13 Jan 2011 13:58:29 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2011/01/13/1245320.html#2010058</guid><description><![CDATA[nb 原来是这样
找了半天 感谢感谢~~~<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">u9wow</a> 2011-01-13 21:58 <a href="http://www.cnblogs.com/8586/archive/2011/01/13/1245320.html#2010058#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:AVI RIFF 文件参考手册</title><link>http://www.cnblogs.com/8586/archive/2010/10/26/1779820.html#1943615</link><dc:creator>lanvv</dc:creator><author>lanvv</author><pubDate>Tue, 26 Oct 2010 08:53:28 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2010/10/26/1779820.html#1943615</guid><description><![CDATA[请问怎么读取avi 里面的ASCII码信息呢
<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">lanvv</a> 2010-10-26 16:53 <a href="http://www.cnblogs.com/8586/archive/2010/10/26/1779820.html#1943615#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:TCP Socket编程 C/C++实现 （Windows Platform SDK）</title><link>http://www.cnblogs.com/8586/archive/2010/09/10/1435678.html#1913586</link><dc:creator>软件小天</dc:creator><author>软件小天</author><pubDate>Fri, 10 Sep 2010 07:26:28 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2010/09/10/1435678.html#1913586</guid><description><![CDATA[谢谢你 对我这个小菜鸟来说很不错呵呵！<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">软件小天</a> 2010-09-10 15:26 <a href="http://www.cnblogs.com/8586/archive/2010/09/10/1435678.html#1913586#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2010/06/08/1499573.html#1842511</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Mon, 07 Jun 2010 21:42:48 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2010/06/08/1499573.html#1842511</guid><description><![CDATA[第四节 SELECT命令中的GROUP BY 和 HAVING 子句

     在介绍GROUP BY 和 HAVING 子句前，我们必需先讲讲sql语言中一种特殊的函数：聚合函数，
例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。

SELECT SUM(population) FROM bbc

     这里的SUM作用在所有返回记录的population字段上，结果就是该查询只返回一个结果，即所有
国家的总人口数。


    通过使用GROUP BY 子句，可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。
当你指定 GROUP BY region 时， 属于同一个region（地区）的一组数据将只能返回一行值．
也就是说，表中所有除region（地区）外的字段，只能通过 SUM, COUNT等聚合函数运算后返回一个值．

HAVING子句可以让我们筛选成组后的各组数据． 
WHERE子句在聚合前先筛选记录．也就是说作用在GROUP BY 子句和HAVING子句前．
而 HAVING子句在聚合后对组记录进行筛选。

让我们还是通过具体的实例来理解GROUP BY 和 HAVING 子句，还采用第三节介绍的bbc表。

SQL实例：

一、显示每个地区的总人口数和总面积．
SELECT region, SUM(population), SUM(area)
  FROM bbc
  GROUP BY region

先以region把返回记录分成多个组，这就是GROUP BY的字面含义。分完组后，然后用聚合函数对每组中
的不同字段（一或多条记录）作运算。

二、 显示每个地区的总人口数和总面积．仅显示那些面积超过1000000的地区。

SELECT region, SUM(population), SUM(area)
  FROM bbc
  GROUP BY region
  HAVING SUM(area)&gt;1000000

在这里，我们不能用where来筛选超过1000000的地区，因为表中不存在这样一条记录。
相反，HAVING子句可以让我们筛选成组后的各组数据．



本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/dpriver/archive/2006/11/10/1377435.aspx<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2010-06-08 05:42 <a href="http://www.cnblogs.com/8586/archive/2010/06/08/1499573.html#1842511#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2010/06/08/1499573.html#1842507</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Mon, 07 Jun 2010 21:03:18 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2010/06/08/1499573.html#1842507</guid><description><![CDATA[nchar，char，varchar与nvarchar区别 
         最近在公司里做项目，遇到一个问题，建的数据库里的中文字符和音标显示为乱码，组里的人所有字符都用varchar表示，所以出现上诉问题，当改为Nvarchar后，问题得到解决。所以有必要把他们的区别再重新复习一遍。

         char类型： 对英文(ASCII)字符占用1个字节，对一个汉字占用2个字节，CHAR存储定长数据很方便，CHAR字段上的索引效率级高，比如定义char(10)，那么不论你存储的数据是否达到了10个字节，都要占去10个字节的空间。因为是固定长度，所以速度效率高。 

        Varchar类型：Varchar 的类型不以空格填满，比如varchar(100)，但它的值只是&quot;qian&quot;,则它的值就是&quot;qian&quot;
而char 不一样，比如char(100),它的值是&quot;qian&quot;，而实际上它在数据库中是&quot;qian &quot;(qian后共有96个空格，就是把它填满为100个字节)。 

        由于char是以固定长度的，所以它的速度会比varchar快得多!但程序处理起来要麻烦一点，要用trim之类的函数把两边的空格去掉!

        VARCHAR存储变长数据，但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的，我们只知道它不可能超过10个字符，把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢？这一个字节用于保存实际使用了多大的长度。

        Nchar类型和Nvarchar类型是怎么一回事呢？为了与其他多种字符的转换，如中文，音标等，对每个英文(ASCII)字符都占用2个字节，对一个汉字也占用两个字节，所有的字符都占用2个字节。

例如

varchar(n):变长型字符数据类型，存储最长长度为8,000 个字符。

举个例子：
insert a select '木子a'
--- 存储长度为5个字节，余下的3个字节全部释放
insert a select '木神易
----存储长度为6个字节，余下的2个字节全部释放
---意思是varchar变长字符数据类型与存储数据的实际长度是一致的

nvarchar(n):可变长度 Unicode 数据，其最大长度为 4,000 字符。
字节的存储大小是所输入字符个数的两倍，
就是说它是双字节来存储数据的。
如果存储数据如果存在单字节时，它也是以双字节来占用存储空间的。

varchar一般适用于英文和数字，Nvarchar适用中文和其他字符，其中N表示Unicode常量，可以解决多语言字符集之间的转换问题
<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2010-06-08 05:03 <a href="http://www.cnblogs.com/8586/archive/2010/06/08/1499573.html#1842507#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2010/06/08/1499573.html#1842498</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Mon, 07 Jun 2010 18:57:43 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2010/06/08/1499573.html#1842498</guid><description><![CDATA[c语言中static关键字有两个作用，一是文件作用域，二是函数作用域。 

一、文件作用域 

文件作用域关键字static的作用是，以static申明的全局变量、函数不得被其他文件所引用，例如： 

//这是mystr.c文件的内容 
#include &lt;string.h&gt; 

static int num = 10; 

int mynum = 100; 

static int str_len(char *str) 
{ 
return strlen(str); 
} 

int mystr_len(char *str) 
{ 
return str_len(str) + num; 
} 

当你mystr.c文件中的str_len函数加上了static关键字，你便不能在其他的地方复用这个函数，譬如，你不能这样写： 

//这是main.c 的内容 

#include &lt;stdio.h&gt; 

int main() 
{ 
int len; 
len = str_len(&quot;hello, world\n&quot;); 
printf(&quot;%d %d\n&quot;, num, len ) 
return 0; 
} 

gcc main.c mystr_len.c 

将不能编译通过，因为mystr.c中的num变量和str_len函数都用了static关键字，导致他们只能在mystr.c中被使用，如文件中的mystr_len函数可以引用num变量和str_len函数。 


//这是main.c 的内容 

#include &lt;stdio.h&gt; 

int main() 
{ 
int len; 
len = mystr_len(&quot;hello, world\n&quot;); 
printf(&quot;%d %d\n&quot;, my_num, len ) 
return 0; 
} 

当不用static关键字时，等同于extern，即 
int mystr_len(char *str) 
{ 
return str_len(str) + num; 
} 

和 

extern int mystr_len(char *str) 
{ 
return str_len(str) + num; 
} 

是一样的。 


二、函数作用域 

static另外一个用途是函数内部静态变量，最常用的情况是 

int *test() 
{ 
int num = 100; 
int *ptr = &amp;num; 
return ptr; 
} 

int main() 
{ 
printf(&quot;%d\n&quot;, *test); 
return 0; 
} 

该函数返回整数num的指针，在main函数中打印*test将会出现段错误，因为num做为test函数内部，只能在test内部被访问。以下程序是正确的。 

int *test() 
{ 
static int num = 100; 
int *ptr = &amp;num; 
return ptr; 
} 

int main() 
{ 
printf(&quot;%d\n&quot;, *test); 
return 0; 
} 

该程序中num变量加了关键字static，函数运行结束后，依然可以在其他地方被引用，只是不能直接通过变量名访问，而要间接通过指针访问，原因是 static变量存储在全局数据段中而不是函数栈中。读者可以将它看作特殊的全局变量，只是其他地方只能通过指针来访问，而不能直接通过变量名访问。
本文来自：我爱研发网(52RD.com) - R&amp;D大本营
详细出处：http://www.52rd.com/Blog/Detail_RD.Blog_qiu3809484_21316.html<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2010-06-08 02:57 <a href="http://www.cnblogs.com/8586/archive/2010/06/08/1499573.html#1842498#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2010/05/26/1499573.html#1833390</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Wed, 26 May 2010 06:39:48 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2010/05/26/1499573.html#1833390</guid><description><![CDATA[请给出下面这段代码执行后的输出结果： 

int   main() 
{ 
int   i   =   0; 
char   outstring[10]; 
sprintf(outstring,   &quot;%d   %d   %d   %d &quot;,   i,   i   -   1,   ++i,i++); 
printf( &quot;i   =   %d\r\n   output   string   =   %s &quot;,   i,   outstring); 
}

结果：
i = 2
outstring = 2 1 2 0

<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2010-05-26 14:39 <a href="http://www.cnblogs.com/8586/archive/2010/05/26/1499573.html#1833390#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2010/05/26/1499573.html#1833378</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Wed, 26 May 2010 06:28:35 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2010/05/26/1499573.html#1833378</guid><description><![CDATA[死锁的四个必要条件

互斥条件（Mutual exclusion）：资源不能被共享，只能由一个进程使用。
请求与保持条件（Hold and wait）：已经得到资源的进程可以再次申请新的资源。
非剥夺条件（No pre-emption）：已经分配的资源不能从相应的进程中被强制地剥夺。
循环等待条件（Circular wait）：系统中若干进程组成环路，改环路中每个进程都在等待相邻进程正占用的资源。

处理死锁的策略

1.忽略该问题。例如鸵鸟算法，该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢，因为传说中鸵鸟看到危险就把头埋在地底下，可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
2.检测死锁并且恢复。
3.仔细地对资源进行动态分配，以避免死锁。
4.通过破除死锁四个必要条件之一，来防止死锁产生。

<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2010-05-26 14:28 <a href="http://www.cnblogs.com/8586/archive/2010/05/26/1499573.html#1833378#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2010/05/26/1499573.html#1833373</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Wed, 26 May 2010 06:18:31 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2010/05/26/1499573.html#1833373</guid><description><![CDATA[题目:
3.   Consider   the   following   program: 
main() 
{ 
    int   a[][3]   =   {   1,2,3   ,4,5,6}; 
    int   (*ptr)[3]   =a; 

    printf( &quot;%d   %d   &quot;     ,(*ptr)[1],   (*ptr)[2]   ); 

    ++ptr; 
    printf( &quot;%d   %d &quot;     ,(*ptr)[1],   (*ptr)[2]   ); 
} 
The   output   for   this   program   is:   

(a)   2   3   5   6 
(b)   2   3   4   5 
(c)   4   5   0   0 
(d)   None   of   the   above 

12.   Object   modules   generated   by   assemblers   that   contain   unresolved   external   references   are   resolved   for   two   or   more   object   modules   by   a/an 

(A)   linker     
(B)   loader     
(C)   operating   system   
(D)   debugger     
(E)   compiler 

16.   In   a   multiprogramming   system,   a   set   of   processes   is   deadlocked   if   each   process   in   the   set   is   waiting   for   an   event   to   occur   that   can   be   initiated   only   by   another   process   in   the   set.   Which   of   the   following   is   NOT   one   of   the   four   conditions   that   are   necessary   for   deadlock   to   occur? 

(A)   mutual   exclusion 
(B)   partial   assignment   of   resources 
(C)   nonpreemption   
(D)   process   suspension 
(E)   circular   wait 

答案：
3A,   ,首先(*ptr)指向数组首地址，即(*ptr)[0]指向数字1,   所以(*ptr)[1]指向2 
(*ptr)[2]指向3。然后，++ptr;，使ptr指向数组的第二行，即指向4，同理，这次(*ptr)[1]指向5，(*ptr)[2]指向6。 

12A，使用外部资源，由连接器来完成 

16D,Coffman,   Elphick和Shoshani于1971年总结了产生死锁的四个必要条件： 
互斥条件(mutual   exclusion)：一个资源一次只能由一个进程使用，如果有其它进程申请使用该资源，申请进程必须等待直到所申请的资源被释放。 
部分分配条件(hold   and   wait)；一个进程已占有一定资源后，执行期间又再申请其它资源。 
不可抢占条件(no   preemption)：一个资源仅能由一个占有它的进程来释放，而不能被其它进程抢占使用。 
循环等待条件(circular   wait)：在系统中存在一个由若干进程申请使用资源而形成的循环等待链，其中每一个进程占有若干资源，同时由又在等待下一个进程所占有的资源。 
要防止死锁问题，其根本的办法就是要使得上述四个条件之一不存在。 
所以第16题答案是D

<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2010-05-26 14:18 <a href="http://www.cnblogs.com/8586/archive/2010/05/26/1499573.html#1833373#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2010/05/26/1499573.html#1833244</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Wed, 26 May 2010 03:32:18 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2010/05/26/1499573.html#1833244</guid><description><![CDATA[1:设char *s=〃china〃;则printf〃%s,%c,%c\n〃,s,*s,s〔3〕;的输出是 
A.china, c,n 
B.china,china,i 
C.c,c,n 
D.china,china,n 2:表达式 0x13&amp; 0x17 的值为 
A.0x17 
B.0x13 
C.0xF8 
D.0xEC 3:下述程序执行后的输出结果是 
＃include 
main() 
{ 
int x='f'; 
printf(&quot;%c\n&quot;,'a'+(x-'a'+1)); 
} 
A.G 
B.H 
C.I 
D.J 4:设int a=9, b=6, c;，执行语句c=a/b+0.8;后c的值是 
A.1 
B.1.8 
C.2 
D.2.3 5:下面C 程序中，若在屏幕上输入数值331后回车，程序执行后，屏幕上显示的输出结果应为____。 
main(void) 
{ unsigned int a,b,c,d; 
Scanf(&quot;%o&quot;,&amp;a); 
b = a&gt;&gt;4; 
c = ~ (~ 0 &lt;&lt; 4); 
d = b &amp; c; 
printf(&quot;d=%o\n&quot;,d); 
} 
A.d=10 
B.d=15 
C.d=25 
D.d=45 6:下列各语句定义了数组，其中哪一个是不正确的 
A.char a [ 3 ][ 10 ] ={&quot;China&quot;,&quot;American&quot;,&quot;Asia&quot;} ; 
B.int x [ 2 ][ 2 ] ={1,2,3,4}; 
C.float x [ 2 ][] ={1,2,4,6,8,10}; 
D.int m [][ 3 ] ={1,2,3,4,5,6}; 7:若定义了 
union
｛ char a〔10〕；
short b〔4〕〔5〕；
long c〔5〕；
｝u；
则执行printf〃％d\n〃，sizeofu；语句的输出结果是 
A.10 
B.20 
C.40 
D.70 8:C语言中，〃\x3d〃在内存中占用的字节数是 
A.1 
B.2 
C.4 
D.5 9:将一个整数10002存到磁盘上，以ASCII码形式存储和以二进制形式存储，占用的字节数分别是 
A.2和2 
B.2和5 
C.5和2 
D.5和5 10:初始化一维数组 a 正确的语句是 
A.int a[10]=(0,0,0,0,0); 
B.int a[10]={ }; 
C.int a[ ]={10} ; 
D.int a[10]={[10*1]}; 11:在C语言中，若定义函数时类型缺省，则类型隐含为 
A.int 
B.char 
C.float 
D.void 12:设int(*p)( );,则p是 
A.一维数组的指针变量 
B.函数的指针变量 
C.二级指针变量 
D.字符串的指针变量 13:下述程序代码中有语法错误的行是（  ）。   int i,ia[10],ib[10];      /*第一行*/  
for (i=0;i&lt;=9;i++)        /*第2行*/    ia[i]=0;          /*第3行*/  
ib=ia;    /*第4行*/  
下述程序代码中有语法错误的行是（  ）。
int i,ia[10],ib[10];      /*第一行*/
for (i=0;i&lt;=9;i++)        /*第2行*/
  ia[i]=0;          /*第3行*/
ib=ia;    /*第4行*/A.第1行 
B.第2行 
C.第3行 
D.第4行 14:若定义了x=100;，则表达式x++&gt;100?x+20：x+10的值是 
A.110 
B.111 
C.120 
D.121 15:执行下列程序 

  int a = 3, b = 4; 

  void fun(int x1, int x2) 

  {printf(〃％d, ％d \ n〃, x1 + x2, b);} 

  main() 

  {int a = 5, b = 6;fun(a, b);} 

  后输出的结果是 
A.3，4 
B.11，1 
C.11，4 
D.11，6 
简答题 
16:打印一个N*N的方阵，N为每边字符的个数（ 3〈N〈20 ），要求最外层为“X”，第二层为“Y”，从第三层起每层依次打印数字0，1，2，3，... 
例子：当N =5，打印出下面的图形： 
X X X X X 
X Y Y Y X 
X Y 0 Y X 
X Y Y Y X 
X X X X X 17:main 函数执行以前，还会执行什么代码？ 18:什么是预编译，何时需要预编译： 
19:执行下列程序后，输出结果为 _______ 。 

  #include 

  fun (int x) 

  { 

  int p; 

  if ((x==0||(x==1)) return (3); 

  p=x-fun(x-2); 

  return p; 

  } 

  main() 

  {printf( 〃 %d \ n 〃 ,fun( 

答案：
1.A
2.B
3.A
4.A
5.B 注意八进制 
6.C
7.C
8.A
9.C 前char数组，后short型
10.C 
11.D
12.B
13.D
14.B
15.C  函数中只见全局变量b==4 
16：大致：
   for(i=0; i&lt;n; i++)
      for(j=0; j&lt;n; j++){
           if(i==0 || j==0 || i==n-1 || j==n-1)
                printf(&quot;X&quot;);
           else if(i==1 || j==1 || i==n-2 || j== n-2)
                printf(&quot;Y&quot;)
           else
                printf(&quot;%d&quot;,j-2&quot;);
17:全局变量初始化
18：主要是编译之前的一些宏替换。
19：题干不完整。列前十五项于下：
   1、3
   2、3
   3、3-fun(1)=0
   4、4-fun(2)=1
   5、5-fun(3) = 5
   6、6-fun(4) = 5
   7、7-fun(5) = 2
   8、8-fun(6) = 3
   9、9-fun(7) =7
   10、10-fun(8)=7
   11、11-fun(9)=4
   12、12-fun(10)=5
   13、13-fun(11)=7
   14、14-fun(12)=9
   15、15-fun(13)=8 
<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2010-05-26 11:32 <a href="http://www.cnblogs.com/8586/archive/2010/05/26/1499573.html#1833244#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:asp.net前台javascript与后台c#相互调用</title><link>http://www.cnblogs.com/8586/archive/2010/04/06/1703721.html#1794801</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Tue, 06 Apr 2010 07:32:53 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2010/04/06/1703721.html#1794801</guid><description><![CDATA[备注：

方法二：1、函数声明为public

　　后台代码(把public改成protected也可以)

以下是引用片段：
public string ss() 
　　{ 
　　return(&quot;a&quot;); 
　　} 


　　2、在html里用可以调用

　　前台脚本

以下是引用片段：
&lt;script language=javascript&gt; 

　　var a = &quot;&lt;%=ss()%&gt;&quot;; 

　　alert(a); 

&lt;/script&gt; 

脚本要写在本页，如果写在包含Js文件里不成功<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2010-04-06 15:32 <a href="http://www.cnblogs.com/8586/archive/2010/04/06/1703721.html#1794801#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/10/09/1499573.html#1667708</link><dc:creator>怂QQ</dc:creator><author>怂QQ</author><pubDate>Fri, 09 Oct 2009 07:01:33 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/10/09/1499573.html#1667708</guid><description><![CDATA[好贴！<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">怂QQ</a> 2009-10-09 15:01 <a href="http://www.cnblogs.com/8586/archive/2009/10/09/1499573.html#1667708#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Re:在D3D环境下进行2D图形绘制。</title><link>http://www.cnblogs.com/8586/archive/2009/10/04/1401368.html#1665171</link><dc:creator>gjfdyh</dc:creator><author>gjfdyh</author><pubDate>Sun, 04 Oct 2009 13:55:50 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/10/04/1401368.html#1665171</guid><description><![CDATA[LZ的代码有问题，执行是抛出异常，根本无法运行！



exe 中的 0x00404d9b 处未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突

		{m_fX-m_fWidth/2*m_fZoomX, m_fY+m_fHeight/2*m_fZoomY, 0.0f, 0xffffffff, 0.0f, 1.0f},        //3    
	};    
	// 创建定点缓冲    
	if( FAILED( m_pd3dDevice-&gt;CreateVertexBuffer( sizeof( Vertices ),    
		0, D3DFVF_CUSTOMVERTEX,    
		D3DPOOL_DEFAULT, &amp;m_pVB, NULL ) ) )  //运行到这里就异常了！  
	{    
		return E_FAIL;    
	}    <br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">gjfdyh</a> 2009-10-04 21:55 <a href="http://www.cnblogs.com/8586/archive/2009/10/04/1401368.html#1665171#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/24/1499573.html#1567181</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Wed, 24 Jun 2009 06:03:59 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/24/1499573.html#1567181</guid><description><![CDATA[Strlen（）的C语言实现，不能使用任何变量。<br/><br/>size_t   strlen(const   char   *s)   <br/>{   <br/>	if(s == NULL)   <br/>		return   -1;   <br/>	return   (*s)? 1 + strlen(++s):0;   <br/>}  <br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-24 14:03 <a href="http://www.cnblogs.com/8586/archive/2009/06/24/1499573.html#1567181#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/23/1499573.html#1566354</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Tue, 23 Jun 2009 09:01:23 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/23/1499573.html#1566354</guid><description><![CDATA[　　10、队列和栈有什么区别？<br/>　　<br/>　　队列先进先出，栈后进先出<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-23 17:01 <a href="http://www.cnblogs.com/8586/archive/2009/06/23/1499573.html#1566354#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/23/1499573.html#1566353</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Tue, 23 Jun 2009 09:01:01 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/23/1499573.html#1566353</guid><description><![CDATA[　　typedef union {long i; int k[5]; char c;} DATE;<br/>　　struct data { int cat; DATE cow; double dog;} too;<br/>　　DATE max;<br/>　　则语句 printf(&quot;%d&quot;,sizeof(struct date)+sizeof(max));的执行结果是：___52____<br/>答：DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20<br/>data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.<br/>所以结果是 20 + 32 = 52.<br/>　　当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2 + DATE10 + double8 = 20<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-23 17:01 <a href="http://www.cnblogs.com/8586/archive/2009/06/23/1499573.html#1566353#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/23/1499573.html#1566344</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Tue, 23 Jun 2009 08:52:26 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/23/1499573.html#1566344</guid><description><![CDATA[#include<br/>main()<br/>{<br/>	int a,b,c,d;<br/>	a=10;<br/>	b=a++;<br/>	c=++a;<br/>	d=10*a++;<br/>	printf(&quot;b，c，d：%d，%d，%d&quot;，b，c，d）;<br/>	return 0;<br/>}<br/>答：10，12，120总结：++优先级大于*<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-23 16:52 <a href="http://www.cnblogs.com/8586/archive/2009/06/23/1499573.html#1566344#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/23/1499573.html#1566332</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Tue, 23 Jun 2009 08:44:11 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/23/1499573.html#1566332</guid><description><![CDATA[	int arr[] = {6,7,8,9,10};<br/>	int* ptr = arr;<br/><br/>	*(ptr++)+=123; <br/>	printf(&quot;%d,%d&quot;,*ptr,*(++ptr)); <br/>//运行结果：8，8<br/><br/><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-23 16:44 <a href="http://www.cnblogs.com/8586/archive/2009/06/23/1499573.html#1566332#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/12/1499573.html#1555982</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Fri, 12 Jun 2009 08:57:44 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/12/1499573.html#1555982</guid><description><![CDATA[1.     C++的类和C里面的struct有什么区别？<br/><br/>struct成员默认访问权限为public，而class成员默认访问权限为private<br/><br/>2.     析构函数和虚函数的用法和作用<br/><br/>析构函数是在对象生存期结束时自动调用的函数，用来释放在构造函数分配的内存。<br/><br/>虚函数是指被关键字virtual说明的函数，作用是使用C++语言的多态特性<br/><br/><br/>3.     全局变量和局部变量有什么区别？是怎么实现的？操作系统和编译器是怎么知道的?<br/><br/>1） 全局变量的作用用这个程序块,而局部变量作用于当前函数<br/><br/>2） 前者在内存中分配在全局数据区,后者分配在栈区<br/><br/>3） 生命周期不同：全局变量随主程序创建和创建，随主程序销毁而销毁，局部变量在局部函数内部，甚至局部循环体等内部存在，退出就不存在<br/><br/>4） 使用方式不同：通过声明后全局变量程序的各个部分都可以用到，局部变量只能在局部使用<br/><br/><br/>4.     有N个大小不等的自然数（1--N），请将它们由小到大排序.要求程序算法：时间复杂度为O(n)，空间复杂度为O(1)。<br/><br/>void sort(int e[], int n)<br/><br/>{<br/><br/>int i;<br/><br/>int t; /*临时变量：空间复杂度O(1)*/<br/><br/><br/>for (i=1; i&lt;n+1; i++) /*时间复杂度O(n)*/<br/><br/>{<br/><br/>  t = e[e[i]]; /*下标为e[i]的元素，排序后其值就是e[i]*/<br/><br/>  e[e[i]] = e[i];<br/><br/>  e[i] = t;<br/><br/>}<br/><br/>}<br/><br/><br/>5.     堆与栈的去区别<br/><br/>A. 申请方式不同<br/><br/>Stack由系统自动分配，而heap需要程序员自己申请，并指明大小。<br/><br/>B. 申请后系统的响应不同<br/><br/>Stack：只要栈的剩余空间大于申请空间，系统就为程序提供内存，否则将抛出栈溢出异常<br/><br/>Heap：当系统收到程序申请时，先遍历操作系统中记录空闲内存地址的链表，寻找第一个大于所申请空间的堆结点，然后将该结点从空间结点链表中删除，并将该结点的空间分配给程序。另外，大多数系统还会在这块内存空间中的首地址处记录本次分配的大小，以便于delete语句正确释放空间。而且，由于找到的堆结点的大小不一定正好等于申请的大小，系统会自动将多余的那部分重新放入空闲链表。<br/><br/>C. 申请大小限制的不同<br/><br/>Stack：在windows下，栈的大小是2M（也可能是1M它是一个编译时就确定的常数），如果申请的空间超过栈的剩余空间时，将提示overflow。因此，能从栈获得的空间较小。<br/><br/>堆：堆是向高地址扩展的数据结构，是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的，自然是不连续的，而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见，堆获得的空间比较灵活，也比较大。<br/><br/>D. 申请效率的比较：<br/><br/>栈由系统自动分配，速度较快。但程序员是无法控制的。<br/><br/>堆是由new分配的内存，一般速度比较慢，而且容易产生内存碎片,不过用起来最方便。<br/><br/>另外，在WINDOWS下，最好的方式是用VirtualAlloc分配内存，他不是在堆，也不是在栈是直接在进程的地址空间中保留一快内存，虽然用起来最不方便。但是速度快，也最灵活。<br/><br/>E. 堆和栈中的存储内容<br/><br/>栈：在函数调用时，第一个进栈的是主函数中后的下一条指令（函数调用语句的下一条可执行语句）的地址，然后是函数的各个参数，在大多数的C编译器中，参数是由右往左入栈的，然后是函数中的局部变量。注意静态变量是不入栈的。<br/><br/>当本次函数调用结束后，局部变量先出栈，然后是参数，最后栈顶指针指向最开始存的地址，也就是主函数中的下一条指令，程序由该点继续运行。<br/><br/>堆：一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。<br/><br/><br/>6.     含参数的宏与函数的优缺点<br/><br/>宏：<br/><br/>优点：在预处理阶段完成，不占用编译时间，同时，省去了函数调用的开销，运行效率高<br/><br/>缺点：不进行类型检查，多次宏替换会导致代码体积变大，而且由于宏本质上是字符串替换，故可能会由于一些参数的副作用导致得出错误的结果。<br/><br/>函数：<br/><br/>优点：没有带参数宏可能导致的副作用，进行类型检查，计算的正确性更有保证。<br/><br/>缺点：函数调用需要参数、返回地址等的入栈、出栈开销，效率没有带参数宏高<br/><br/>PS：宏与内联函数的区别<br/><br/>内联函数和宏都是在程序出现的地方展开，内联函数不是通过函数调用实现的，是在调用该函数的程序处将它展开（在编译期间完成的）；宏同样是；   <br/><br/>不同的是：内联函数可以在编译期间完成诸如类型检测，语句是否正确等编译功能；宏就不具有这样的功能，而且宏展开的时间和内联函数也是不同的（在运行期间展开）<br/><br/><br/>7.     Windows程序的入口是哪里？写出Windows消息机制的流程<br/><br/>Windows程序的入口是WinMain()函数。<br/><br/>               <br/><br/>Windows应用程序消息处理机制：<br/><br/>A. 操作系统接收应用程序的窗口消息，将消息投递到该应用程序的消息队列中<br/><br/>B. 应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息，取出消息后，应用程序可以对消息进行一些预处理。<br/><br/>C. 应用程序调用DispatchMessage，将消息回传给操作系统。<br/><br/>D. 系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程，对消息进行处理。<br/><br/>8.     如何定义和实现一个类的成员函数为回调函数<br/><br/>A.     什么是回调函数?<br/><br/>简而言之，回调函数就是被调用者回头调用调用者的函数。 <br/><br/>使用回调函数实际上就是在调用某个函数（通常是API函数）时，将自己的一个函数（这个函数为回调函数）的地址作为参数传递给那个被调用函数。而该被调用函数在需要的时候，利用传递的地址调用回调函数。<br/><br/>回调函数，就是由你自己写的，你需要调用另外一个函数，而这个函数的其中一个参数，就是你的这个回调函数名。这样，系统在必要的时候，就会调用你写的回调函数，这样你就可以在回调函数里完成你要做的事。<br/><br/>B.      如何定义和实现一个类的成员函数为回调函数<br/><br/>要定义和实现一个类的成员函数为回调函数需要做三件事：<br/><br/>a．   声明；<br/><br/>b．   定义；<br/><br/>c．    设置触发条件，就是在你的函数中把你的回调函数名作为一个参数，以便系统调用<br/><br/>如：<br/><br/>一、声明回调函数类型<br/><br/>typedef void (*FunPtr)(void);<br/><br/>二、定义回调函数<br/><br/>class A  <br/><br/>{<br/><br/>public:<br/><br/>       A();<br/><br/>       static void callBackFun(void)   //回调函数，必须声明为static<br/><br/>       {<br/><br/>              cout&lt;&lt;&quot;callBackFun&quot;&lt;&lt;endl;<br/><br/>       }<br/><br/>       virtual ~A();<br/><br/><br/>};<br/><br/>三、设置触发条件<br/><br/>void Funtype(FunPtr p)<br/><br/>{<br/><br/>       p();<br/><br/>}<br/><br/>void main(void)<br/><br/>{<br/><br/>       Funtype(A::callBackFun);<br/><br/>}<br/><br/>C.     回调函数与API函数<br/>回调和API非常接近，他们的共性都是跨层调用的函数。但区别是API是低层提供给高层的调用，一般这个函数对高层都是已知的；而回调正好相反，他是高层提供给底层的调用，对于低层他是未知的，必须由高层进行安装，这个安装函数其实就是一个低层提供的API，安装后低层不知道这个回调的名字，但它通过一个函数指针来保存这个回调函数，在需要调用时，只需引用这个函数指针和相关的参数指针。<br/><br/>其实：回调就是该函数写在高层，低层通过一个函数指针保存这个函数，在某个事件的触发下，低层通过该函数指针调用高层那个函数。<br/><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-12 16:57 <a href="http://www.cnblogs.com/8586/archive/2009/06/12/1499573.html#1555982#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/12/1499573.html#1555883</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Fri, 12 Jun 2009 07:50:49 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/12/1499573.html#1555883</guid><description><![CDATA[求一数组的第二大数（微软）<br/><br/>int FindSec(int data[],int count)<br/>{<br/>	int firstMax = data[0];<br/>	int secondMax = data[0];<br/>	for (int i = 0; i &lt; count;i++)<br/>	{<br/>		if(data[i] &gt; firstMax)<br/>		{<br/>			secondMax = firstMax;<br/>			firstMax = data[i];<br/>		}<br/>		if (data[i] &gt; secondMax &amp;&amp; data[i] &lt; firstMax)<br/>			secondMax = data[i];<br/>		<br/><br/>	}<br/>	return secondMax;<br/>}<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-12 15:50 <a href="http://www.cnblogs.com/8586/archive/2009/06/12/1499573.html#1555883#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/12/1499573.html#1555416</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Fri, 12 Jun 2009 03:17:01 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/12/1499573.html#1555416</guid><description><![CDATA[//功能：数组从小到大排序<br/>void Sort(int data[],int count)<br/>{<br/>	int nmix = data[0];<br/>	for (int j = 0;j &lt; count; j++)<br/>	{<br/>		<br/>		for (int i = j;i&lt;count;i++)<br/>		{<br/>			nmix = data[j];<br/>			if(data[i]&lt; nmix)<br/>			{<br/>				nmix = data[i];<br/>				data[i] = data[j];<br/>				data[j] = nmix;<br/><br/>			}<br/>		}<br/>	}<br/>}<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-12 11:17 <a href="http://www.cnblogs.com/8586/archive/2009/06/12/1499573.html#1555416#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 关于链表的创建 代码</title><link>http://www.cnblogs.com/8586/archive/2009/06/12/1441422.html#1555227</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Fri, 12 Jun 2009 02:13:45 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/12/1441422.html#1555227</guid><description><![CDATA[已知两个链表head1 和head2 各自有序，请把它们合并成一个链表依然有序，这次要求用递归方法进行。 (Autodesk)<br/>答案：<br/>Node * MergeRecursive(Node *head1 , Node *head2)<br/>{<br/>if ( head1 == NULL )<br/>return head2 ;<br/>if ( head2 == NULL)<br/>return head1 ;<br/>Node *head = NULL ;<br/>if ( head1-&gt;data &lt; head2-&gt;data )<br/>{<br/>head = head1 ;<br/>head-&gt;next = MergeRecursive(head1-&gt;next,head2);<br/>}<br/>else<br/>{<br/>head = head2 ;<br/>head-&gt;next = MergeRecursive(head1,head2-&gt;next);<br/>}<br/>return head ;<br/>}<br/><br/><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-12 10:13 <a href="http://www.cnblogs.com/8586/archive/2009/06/12/1441422.html#1555227#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 关于链表的创建 代码</title><link>http://www.cnblogs.com/8586/archive/2009/06/12/1441422.html#1555223</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Fri, 12 Jun 2009 02:13:14 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/12/1441422.html#1555223</guid><description><![CDATA[已知两个链表head1 和head2 各自有序，请把它们合并成一个链表依然有序。(保留所有结点，即便大小相同）<br/><br/>Node * Merge(Node *head1 , Node *head2)<br/>{<br/>if ( head1 == NULL)<br/>return head2 ;<br/>if ( head2 == NULL)<br/>return head1 ;<br/>Node *head = NULL ;<br/>Node *p1 = NULL;<br/>Node *p2 = NULL;<br/>if ( head1-&gt;data &lt; head2-&gt;data )<br/>{<br/>head = head1 ;<br/>p1 = head1-&gt;next;<br/>p2 = head2 ;<br/>}<br/>else<br/>{<br/>head = head2 ;<br/>p2 = head2-&gt;next ;<br/>p1 = head1 ;<br/>}<br/>Node *pcurrent = head ;<br/>while ( p1 != NULL &amp;&amp; p2 != NULL)<br/>{<br/>if ( p1-&gt;data &lt;= p2-&gt;data )<br/>{<br/>pcurrent-&gt;next = p1 ;<br/>pcurrent = p1 ;<br/>p1 = p1-&gt;next ;<br/>}<br/>else<br/>{<br/>pcurrent-&gt;next = p2 ;<br/>pcurrent = p2 ;<br/>p2 = p2-&gt;next ;<br/>}<br/>}<br/>if ( p1 != NULL )<br/>pcurrent-&gt;next = p1 ;<br/>if ( p2 != NULL )<br/>pcurrent-&gt;next = p2 ;<br/>return head ;<br/>}<br/><br/><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-12 10:13 <a href="http://www.cnblogs.com/8586/archive/2009/06/12/1441422.html#1555223#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 关于链表的创建 代码</title><link>http://www.cnblogs.com/8586/archive/2009/06/12/1441422.html#1555181</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Fri, 12 Jun 2009 01:49:23 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/12/1441422.html#1555181</guid><description><![CDATA[大概思路<br/>p1-&gt;p2-&gt;p3-&gt;..pn<br/>p1&lt;-p2-&gt;p3-&gt;..pn<br/>p1&lt;-p2&lt;-p3-&gt;..pn<br/>p1&lt;-p2&lt;-p3&lt;-..pn<br/><br/>return pn<br/><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-12 09:49 <a href="http://www.cnblogs.com/8586/archive/2009/06/12/1441422.html#1555181#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 关于链表的创建 代码</title><link>http://www.cnblogs.com/8586/archive/2009/06/11/1441422.html#1554191</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Thu, 11 Jun 2009 03:49:15 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/11/1441422.html#1554191</guid><description><![CDATA[(1)已知链表的头结点head,写一个函数把这个链表逆序 ( Intel)<br/><br/>Node * ReverseList(Node *head) //链表逆序<br/>{<br/>if ( head == NULL || head-&gt;next == NULL )<br/>return head;<br/>Node *p1 = head ;<br/>Node *p2 = p1-&gt;next ;<br/>Node *p3 = p2-&gt;next ;<br/>p1-&gt;next = NULL ;<br/>while ( p3 != NULL )<br/>{<br/>p2-&gt;next = p1 ;<br/>p1 = p2 ;<br/>p2 = p3 ;<br/>p3 = p3-&gt;next ;<br/>}<br/>p2-&gt;next = p1 ;<br/>head = p2 ;<br/>return head ;<br/>}<br/><br/><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-11 11:49 <a href="http://www.cnblogs.com/8586/archive/2009/06/11/1441422.html#1554191#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/11/1499573.html#1554189</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Thu, 11 Jun 2009 03:47:57 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/11/1499573.html#1554189</guid><description><![CDATA[36. 如何打印出当前源文件的文件名以及源文件的当前行号？<br/>答案：<br/>cout &lt;&lt; __FILE__ ;<br/>cout&lt;&lt;__LINE__ ;<br/>__FILE__和__LINE__是系统预定义宏，这种宏并不是在某个文件中定义的，而是由编译器定义的<br/><br/>38. 如何判断一段程序是由C 编译程序还是由C++编译程序编译的？<br/>答案：<br/>#ifdef __cplusplus<br/>cout&lt;&lt;&quot;c++&quot;;<br/>#else<br/>cout&lt;&lt;&quot;c&quot;;<br/>#endif<br/><br/>(1)已知链表的头结点head,写一个函数把这个链表逆序 ( Intel)<br/><br/>Node * ReverseList(Node *head) //链表逆序<br/>{<br/>if ( head == NULL || head-&gt;next == NULL )<br/>return head;<br/>Node *p1 = head ;<br/>Node *p2 = p1-&gt;next ;<br/>Node *p3 = p2-&gt;next ;<br/>p1-&gt;next = NULL ;<br/>while ( p3 != NULL )<br/>{<br/>p2-&gt;next = p1 ;<br/>p1 = p2 ;<br/>p2 = p3 ;<br/>p3 = p3-&gt;next ;<br/>}<br/>p2-&gt;next = p1 ;<br/>head = p2 ;<br/>return head ;<br/>}<br/><br/><br/><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-11 11:47 <a href="http://www.cnblogs.com/8586/archive/2009/06/11/1499573.html#1554189#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/11/1499573.html#1554097</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Thu, 11 Jun 2009 03:03:18 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/11/1499573.html#1554097</guid><description><![CDATA[34.类成员函数的重载、覆盖和隐藏区别？<br/>答案：<br/>a.成员函数被重载的特征：<br/>（1）相同的范围（在同一个类中）；<br/>（2）函数名字相同；<br/>（3）参数不同；<br/>（4）virtual 关键字可有可无。<br/>b.覆盖是指派生类函数覆盖基类函数，特征是：<br/>（1）不同的范围（分别位于派生类与基类）；<br/>（2）函数名字相同；<br/>（3）参数相同；<br/>（4）基类函数必须有virtual 关键字。<br/>c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数，规则如下：<br/>（1）如果派生类的函数与基类的函数同名，但是参数不同。此时，不论有无virtual关键字，基类的函数将被隐藏（注意别与重载混淆）。<br/>（2）如果派生类的函数与基类的函数同名，并且参数也相同，但是基类函数没有virtual 关键字。此时，基类的函数被隐藏（注意别与覆盖混淆）<br/><br/><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-11 11:03 <a href="http://www.cnblogs.com/8586/archive/2009/06/11/1499573.html#1554097#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/10/1499573.html#1553245</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Wed, 10 Jun 2009 06:11:50 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/10/1499573.html#1553245</guid><description><![CDATA[1. 以下三条输出语句分别输出什么？[C易]<br/>char str1[]       = &quot;abc&quot;;<br/>char str2[]       = &quot;abc&quot;;<br/>const char str3[] = &quot;abc&quot;; <br/>const char str4[] = &quot;abc&quot;; <br/>const char* str5  = &quot;abc&quot;;<br/>const char* str6  = &quot;abc&quot;;<br/>cout &lt;&lt; boolalpha &lt;&lt; ( str1==str2 ) &lt;&lt; endl; // 输出什么？<br/>cout &lt;&lt; boolalpha &lt;&lt; ( str3==str4 ) &lt;&lt; endl; // 输出什么？<br/>cout &lt;&lt; boolalpha &lt;&lt; ( str5==str6 ) &lt;&lt; endl; // 输出什么？<br/><br/>答：分别输出false,false,true。str1和str2都是字符数组，每个都有其自己的存储区，它<br/>们的值则是各存储区首地址，不等；str3和str4同上，只是按const语义，它们所指向的数<br/>据区不能修改。str5和str6并非数组而是字符指针，并不分配存储区，其后的“abc”以常<br/>量形式存于静态数据区，而它们自己仅是指向该区首地址的指针，相等。<br/><br/><br/>12. 以下代码中的两个sizeof用法有问题吗？[C易]<br/>void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母<br/>{<br/>    for( size_t i=0; i&lt;sizeof(str)/sizeof(str[0]); ++i )<br/>        if( 'a'&lt;=str[i] &amp;&amp; str[i]&lt;='z' )<br/>            str[i] -= ('a'-'A' );<br/>}<br/>char str[] = &quot;aBcDe&quot;;<br/>cout &lt;&lt; &quot;str字符长度为: &quot; &lt;&lt; sizeof(str)/sizeof(str[0]) &lt;&lt; endl;<br/>UpperCase( str );<br/>cout &lt;&lt; str &lt;&lt; endl;<br/><br/>答：函数内的sizeof有问题。根据语法，sizeof如用于数组，只能测出静态数组的大小，无<br/>法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组，因此其大小为6，<br/>函数内的str实际只是一个指向字符串的指针，没有任何额外的与数组相关的信息，因此siz<br/>eof作用于上只将其当指针看，一个指针为4个字节，因此返回4。<br/><br/><br/>13. 非C++内建型别 A 和 B，在哪几种情况下B能隐式转化为A？[C++中等]<br/>答：<br/>a. class B : public A { ……} // B公有继承自A，可以是间接继承的<br/>b. class B { operator A( ); } // B实现了隐式转化为A的转化<br/>c. class A { A( const B&amp; ); } // A实现了non-explicit的参数为B（可以有其他带默认<br/>值的参数）构造函数<br/>d. A&amp; operator= ( const A&amp; ); // 赋值操作，虽不是正宗的隐式类型转换，但也可以勉<br/>强算一个<br/><br/><br/>4. 以下代码有什么问题？[C++易]<br/>struct Test<br/>{<br/>    Test( int ) {}<br/>    Test() {}<br/>    void fun() {}<br/>};<br/>void main( void )<br/>{<br/>    Test a(1);<br/>    a.fun();<br/>    Test b();<br/>    b.fun();<br/>}<br/><br/>答：变量b定义出错。按默认构造函数定义对象，不需要加括号。<br/><br/><br/>5. 以下代码有什么问题？[C++易]<br/>cout &lt;&lt; (true?1:&quot;1&quot;) &lt;&lt; endl;<br/>答：三元表达式“？:”问号后面的两个操作数必须为同一类型。<br/><br/><br/>8. 以下代码能够编译通过吗，为什么？[C++易]<br/>unsigned int const size1 = 2;<br/>char str1[ size1 ];<br/>unsigned int temp = 0;<br/>cin &gt;&gt; temp;<br/>unsigned int const size2 = temp;<br/>char str2[ size2 ];<br/>答：str2定义出错，size2非编译器期间常量，而数组定义要求长度必须为编译期常量。<br/><br/><br/>2. 以下反向遍历array数组的方法有什么错误？[STL易]<br/>vector array;<br/>array.push_back( 1 );<br/>array.push_back( 2 );<br/>array.push_back( 3 );<br/>for( vector::size_type i=array.size()-1; i&gt;=0; --i ) // 反向遍历array数组<br/>{<br/>    cout &lt;&lt; array[i] &lt;&lt; endl;<br/>}<br/><br/>答：首先数组定义有误，应加上类型参数：vector&lt;int&gt; array。其次vector::size_type被<br/>定义为unsigned int，即无符号数，这样做为循环变量的i为0时再减1就会变成最大的整数<br/>，导致循环失去控制。<br/><br/><br/>9. 以下代码中的输出语句输出0吗，为什么？[C++易]<br/>struct CLS<br/>{<br/>    int m_i;<br/>    CLS( int i ) : m_i(i) {}<br/>    CLS()<br/>    {<br/>        CLS(0);<br/>    }<br/>};<br/>CLS obj;<br/>cout &lt;&lt; obj.m_i &lt;&lt; endl;<br/><br/>答：不能。在默认构造函数内部再调用带参的构造函数属用户行为而非编译器行为，亦即仅<br/>执行函数调用，而不会执行其后的初始化表达式。只有在生成对象时，初始化表达式才会随<br/>相应的构造函数一起调用。<br/><br/><br/>10. C++中的空类，默认产生哪些类成员函数？[C++易]<br/>答：<br/>class Empty<br/>{<br/>public:<br/>    Empty();                          // 缺省构造函数<br/>    Empty( const Empty&amp; );            // 拷贝构造函数<br/>    ~Empty();                         // 析构函数<br/>    Empty&amp; operator=( const Empty&amp; ); // 赋值运算符<br/>    Empty* operator&amp;();               // 取址运算符<br/>    const Empty* operator&amp;() const;   // 取址运算符 const<br/>};<br/><br/><br/><br/>3. 以下两条输出语句分别输出什么？[C++难]<br/>float a = 1.0f;<br/>cout &lt;&lt; (int)a &lt;&lt; endl;<br/>cout &lt;&lt; (int&amp;)a &lt;&lt; endl;<br/>cout &lt;&lt; boolalpha &lt;&lt; ( (int)a == (int&amp;)a ) &lt;&lt; endl; // 输出什么？<br/>float b = 0.0f;<br/>cout &lt;&lt; (int)b &lt;&lt; endl;<br/>cout &lt;&lt; (int&amp;)b &lt;&lt; endl;<br/>cout &lt;&lt; boolalpha &lt;&lt; ( (int)b == (int&amp;)b ) &lt;&lt; endl; // 输出什么？<br/><br/>答：分别输出false和true。注意转换的应用。(int)a实际上是以浮点数a为参数构造了一个<br/>整型数，该整数的值是1，(int&amp;)a则是告诉编译器将a当作整数看（并没有做任何实质上的<br/>转换）。因为1以整数形式存放和以浮点形式存放其内存数据是不一样的，因此两者不等。<br/>对b的两种转换意义同上，但是0的整数形式和浮点形式其内存数据是一样的，因此在这种特<br/>殊情形下，两者相等（仅仅在数值意义上）。<br/>注意，程序的输出会显示(int&amp;)a=1065353216，这个值是怎么来的呢？前面已经说了，1以<br/>浮点数形式存放在内存中，按ieee754规定，其内容为0x0000803F（已考虑字节反序）。这<br/>也就是a这个变量所占据的内存单元的值。当(int&amp;)a出现时，它相当于告诉它的上下文：“<br/>把这块地址当做整数看待！不要管它原来是什么。”这样，内容0x0000803F按整数解释，其<br/>值正好就是1065353216（十进制数）。<br/>通过查看汇编代码可以证实“(int)a相当于重新构造了一个值等于a的整型数”之说，而(in<br/>t&amp;)的作用则仅仅是表达了一个类型信息，意义在于为cout&lt;&lt;及==选择正确的重载版本。<br/><br/><br/>6. 以下代码有什么问题？[STL易]<br/>typedef vector IntArray;<br/>IntArray array;<br/>array.push_back( 1 );<br/>array.push_back( 2 );<br/>array.push_back( 2 );<br/>array.push_back( 3 );<br/>// 删除array数组中所有的2<br/>for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )<br/>{<br/>    if( 2 == *itor ) array.erase( itor );<br/>}<br/><br/>答：同样有缺少类型参数的问题。另外，每次调用“array.erase( itor );”，被删除元素<br/>之后的内容会自动往前移，导致迭代漏项，应在删除一项后使itor--，使之从已经前移的下<br/>一个元素起继续遍历。<br/><br/>11. 写一个函数，完成内存之间的拷贝。[考虑问题是否全面]<br/>答：<br/>void* mymemcpy( void *dest, const void *src, size_t count )<br/>{<br/>    char* pdest = static_cast&lt;char*&gt;( dest );<br/>    const char* psrc = static_cast&lt;const char*&gt;( src );<br/>    if( pdest&gt;psrc &amp;&amp; pdest&lt;psrc+cout ) 能考虑到这种情况就行了<br/>    {<br/>        for( size_t i=count-1; i!=-1; --i )<br/>                pdest[i] = psrc[i];<br/>    }<br/>    else<br/>    {<br/>        for( size_t i=0; i&lt;count; ++i )<br/>            pdest[i] = psrc[i];<br/>    }<br/>    return dest;<br/>}<br/><br/><br/><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-10 14:11 <a href="http://www.cnblogs.com/8586/archive/2009/06/10/1499573.html#1553245#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/10/1499573.html#1553238</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Wed, 10 Jun 2009 06:01:12 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/10/1499573.html#1553238</guid><description><![CDATA[	char str[] = &quot;abcdE&quot;; //结尾自动补0
<br/>	int a = sizeof(str);  //a = 6
<br/>	ChangeChar(str);//传递是指针
<br/>所以：
<br/> void ChangeChar(char str[])
<br/> {
<br/>	sizeof(str) ;//str是指针，所以永远 sizeof(str) == 4，strlen(str) == 5,但是sizeof(*str) = 1,因为*str为'a'
<br/> }<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-10 14:01 <a href="http://www.cnblogs.com/8586/archive/2009/06/10/1499573.html#1553238#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: c++笔试题汇总</title><link>http://www.cnblogs.com/8586/archive/2009/06/10/1499573.html#1553235</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Wed, 10 Jun 2009 05:58:59 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/10/1499573.html#1553235</guid><description><![CDATA[12. 以下代码中的两个sizeof用法有问题吗？[C易]<br/>void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母<br/>{<br/>    for( size_t i=0; i&lt;sizeof(str)/sizeof(str[0]); ++i )<br/>        if( 'a'&lt;=str[i] &amp;&amp; str[i]&lt;='z' )<br/>            str[i] -= ('a'-'A' );<br/>}<br/>char str[] = &quot;aBcDe&quot;;<br/>cout &lt;&lt; &quot;str字符长度为: &quot; &lt;&lt; sizeof(str)/sizeof(str[0]) &lt;&lt; endl;<br/>UpperCase( str );<br/>cout &lt;&lt; str &lt;&lt; endl;<br/><br/>答：函数内的sizeof有问题。根据语法，sizeof如用于数组，只能测出静态数组的大小，无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组，因此其大小为6，函数内的str实际只是一个指向字符串的指针，没有任何额外的与数组相关的信息，因此sizeof作用于上只将其当指针看，一个指针为4个字节，因此返回4。<br/><br/><br/><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-10 13:58 <a href="http://www.cnblogs.com/8586/archive/2009/06/10/1499573.html#1553235#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 忽略的 switch case</title><link>http://www.cnblogs.com/8586/archive/2009/06/10/1500289.html#1553095</link><dc:creator>浪端之渡鸟</dc:creator><author>浪端之渡鸟</author><pubDate>Wed, 10 Jun 2009 03:36:17 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/10/1500289.html#1553095</guid><description><![CDATA[The   expression   must   be   of   an   integral   type   or   of   a   class   type   for   which   there   is   an   unambiguous   conversion   to   integral   type.  
支持int,char<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">浪端之渡鸟</a> 2009-06-10 11:36 <a href="http://www.cnblogs.com/8586/archive/2009/06/10/1500289.html#1553095#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>re: 一个女孩的IT创业经历</title><link>http://www.cnblogs.com/8586/archive/2009/06/02/1266970.html#1545657</link><dc:creator>混世一书童</dc:creator><author>混世一书童</author><pubDate>Tue, 02 Jun 2009 09:44:29 GMT</pubDate><guid>http://www.cnblogs.com/8586/archive/2009/06/02/1266970.html#1545657</guid><description><![CDATA[牛B<br><br><div align=right><a style="text-decoration:none;" href="http://www.cnblogs.com/8586/" target="_blank">混世一书童</a> 2009-06-02 17:44 <a href="http://www.cnblogs.com/8586/archive/2009/06/02/1266970.html#1545657#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>
