⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c语言强制类型转换 c-c++ - c语言 - csdn社区 community_csdn_net.htm

📁 最全的介绍C语言结构体的使用方法和使用技巧!
💻 HTM
📖 第 1 页 / 共 2 页
字号:
type &nbsp; ‘void‘”。不过,即使void &nbsp; a的编译不会出错,它也没有任何实际意义。 &nbsp; <BR>&nbsp; 
&nbsp; <BR>&nbsp;   void真正发挥的作用在于: &nbsp; <BR>&nbsp;   (1) &nbsp; 对函数返回的限定; 
&nbsp; <BR>&nbsp;   (2) &nbsp; 对函数参数的限定。 &nbsp; <BR>&nbsp; 
众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。 
&nbsp; &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp;   例如: &nbsp; <BR>&nbsp; float &nbsp; 
*p1; &nbsp; <BR>&nbsp; int &nbsp; *p2; &nbsp; <BR>&nbsp; p1 &nbsp; = &nbsp; p2; 
&nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp;   其中p1 &nbsp; = &nbsp; p2语句会编译出错,提示“‘=‘ 
&nbsp; : &nbsp; cannot &nbsp; convert &nbsp; from &nbsp; ‘int &nbsp; *‘ &nbsp; 
to &nbsp; ‘float &nbsp; *‘”,必须改为: &nbsp; <BR>&nbsp; p1 &nbsp; = &nbsp; (float 
&nbsp; *)p2; &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; &nbsp; 
<BR>&nbsp; 而void &nbsp; *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换: &nbsp; <BR>&nbsp; void 
&nbsp; *p1; &nbsp; <BR>&nbsp; int &nbsp; *p2; &nbsp; <BR>&nbsp; p1 &nbsp; = 
&nbsp; p2; &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp;   但这并不意味着,void &nbsp; 
*也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包容“无类型”。道理很简单,我们可以说“男人和女人都是人”,但不能说“人是男人”或者“人是女人”。下面的语句编译出错: 
&nbsp; <BR>&nbsp; void &nbsp; *p1; &nbsp; <BR>&nbsp; int &nbsp; *p2; &nbsp; 
<BR>&nbsp; p2 &nbsp; = &nbsp; p1; &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp;   提示“‘=‘ 
&nbsp; : &nbsp; cannot &nbsp; convert &nbsp; from &nbsp; ‘void &nbsp; *‘ &nbsp; 
to &nbsp; ‘int &nbsp; *‘”。<A 
href="http://topic.csdn.net/t/20060806/20/4930851.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_35994845>7 楼</A>lj860603(跑吧,键键)<INPUT class=user5 title="五级用户 该版得分小于等于5000分,大于2000分" type=button></STRONG><SPAN>回复于 
2006-08-06 21:49:30 得分 0 </SPAN></H3>
<P>要不LZ可以试试下面的代码: &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; #include&lt;stdio.h&gt; 
&nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; int &nbsp; main(void) &nbsp; <BR>&nbsp; { 
&nbsp; <BR>&nbsp; void &nbsp; *p &nbsp; = &nbsp; NULL; &nbsp; <BR>&nbsp; int 
&nbsp; a &nbsp; = &nbsp; 10; &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; p &nbsp; = 
&nbsp; &amp;a; &nbsp; <BR>&nbsp; printf("%d\n", &nbsp; *(int &nbsp; *)p); &nbsp; 
<BR>&nbsp; &nbsp; <BR>&nbsp; int &nbsp; b &nbsp; = &nbsp; *p; &nbsp; &nbsp; 
&nbsp; //这句编译器会报错,VC下,其他不清楚。 &nbsp; <BR>&nbsp; printf("%d\n", &nbsp; b); &nbsp; 
<BR>&nbsp; &nbsp; <BR>&nbsp; return &nbsp; 0; &nbsp; <BR>&nbsp; } &nbsp; 
<BR>&nbsp; &nbsp; <BR>&nbsp; 报错信息: &nbsp; <BR>&nbsp; :\VC98\code\1.cpp(9) &nbsp; 
: &nbsp; error &nbsp; C2440: &nbsp; 'initializing' &nbsp; : &nbsp; cannot &nbsp; 
convert &nbsp; from &nbsp; 'void &nbsp; *' &nbsp; to &nbsp; 'int' &nbsp; 
<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This &nbsp; 
conversion &nbsp; requires &nbsp; a &nbsp; reinterpret_cast, &nbsp; a &nbsp; 
C-style &nbsp; cast &nbsp; or &nbsp; function-style &nbsp; cast<A 
href="http://topic.csdn.net/t/20060806/20/4930851.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_35994856>8 楼</A>lj860603(跑吧,键键)<INPUT class=user5 title="五级用户 该版得分小于等于5000分,大于2000分" type=button></STRONG><SPAN>回复于 
2006-08-06 21:50:48 得分 0 </SPAN></H3>
<P>sankt(黄景天) &nbsp; 似乎没有理解楼主的意思哦^_^ &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; 
偶说错大家勿怪<A href="http://topic.csdn.net/t/20060806/20/4930851.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_35994915>9 楼</A>jixingzhong(瞌睡虫·星辰)<INPUT class=star4 title="四星用户 该版得分小于等于100000分,大于50000分" type=button></STRONG><SPAN>回复于 
2006-08-06 21:58:16 得分 0 </SPAN></H3>
<P>这么做是可以的, &nbsp; <BR>&nbsp; C &nbsp; 中的强制转换可谓是 &nbsp; 无所不能, &nbsp; <BR>&nbsp; 
这个 &nbsp; 无所不能 &nbsp; 由于程度级别太高, &nbsp; <BR>&nbsp; 造成了很大的安全隐患 &nbsp; ...... 
&nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; 所以, &nbsp; <BR>&nbsp; 对于这样的 &nbsp; 强制类型转化, 
&nbsp; <BR>&nbsp; 一定要慎用。<A 
href="http://topic.csdn.net/t/20060806/20/4930851.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_35994925>10 楼</A>jixingzhong(瞌睡虫·星辰)<INPUT class=star4 title="四星用户 该版得分小于等于100000分,大于50000分" type=button></STRONG><SPAN>回复于 
2006-08-06 21:59:56 得分 0 </SPAN></H3>
<P>sankt &nbsp; 说的也和这个相关, &nbsp; <BR>&nbsp; 确实极少这么做的 &nbsp; ... &nbsp; 
<BR>&nbsp; &nbsp; <BR>&nbsp; void &nbsp; 的使用, &nbsp; <BR>&nbsp; 多是作为一个中间类型存在, 
&nbsp; <BR>&nbsp; 而不是一开始就是 &nbsp; void, &nbsp; <BR>&nbsp; 然后被转换为 &nbsp; 目标类型来使用的 
&nbsp; ...<A 
href="http://topic.csdn.net/t/20060806/20/4930851.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_35994960>11 楼</A>lj860603(跑吧,键键)<INPUT class=user5 title="五级用户 该版得分小于等于5000分,大于2000分" type=button></STRONG><SPAN>回复于 
2006-08-06 22:04:43 得分 0 </SPAN></H3>
<P>TO:瞌睡虫 &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; 斑竹,强制转换一次后以后指针都是那个类型的? &nbsp; 
<BR>&nbsp; 我从来这么用过,我刚还写了那程序验证,VC它说不可以。<A 
href="http://topic.csdn.net/t/20060806/20/4930851.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_35995322>12 楼</A>tailzhou(尾巴)<INPUT class=star1 title="一星用户 该版得分小于等于10000分,大于5000分" type=button></STRONG><SPAN>回复于 
2006-08-06 22:45:08 得分 0 </SPAN></H3>
<P>lz的要求是不行的! &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; void &nbsp; *vp; &nbsp; 
<BR>&nbsp; int* &nbsp; ip; &nbsp; <BR>&nbsp; ... &nbsp; <BR>&nbsp; ip=(int 
&nbsp; *)vp; &nbsp; &nbsp; <BR>&nbsp; or &nbsp; <BR>&nbsp; (int &nbsp; *)vp; 
&nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 对vp的强制转换只是表达式的类型变成了int &nbsp; 8而已 &nbsp; 
<BR>&nbsp; 不会影响到vp的类型,vp还是void &nbsp; *,<A 
href="http://topic.csdn.net/t/20060806/20/4930851.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_35998438>13 楼</A>jigangwang(wang)<INPUT class=user3 title="三级用户 该版得分小于等于1000分,大于500分" type=button></STRONG><SPAN>回复于 
2006-08-07 09:45:48 得分 0 </SPAN></H3>
<P>每次用的时候都需要做转换的. &nbsp; <BR>&nbsp; <A 
href="http://topic.csdn.net/t/20060806/20/4930851.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_35999007>14 楼</A>simulationz()<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于 
2006-08-07 10:03:41 得分 0 </SPAN></H3>
<P>c语言中, &nbsp; 能不能定义一个 &nbsp; void &nbsp; * &nbsp; p; &nbsp; <BR>&nbsp; 然后把p转化为 
&nbsp; int* &nbsp; <BR>&nbsp; 后面的操作都不用再转换了,就是 &nbsp; int* &nbsp; 来使用了 &nbsp; 
<BR>&nbsp; 
lz所说的意思是想在以后使用p的时候直接当成int*,引入一个int*变量,通过转型将P赋值给它就可以了,其他方法,例如定义宏,我认为不能够简化程序编写。 
&nbsp; <BR>&nbsp; <A 
href="http://topic.csdn.net/t/20060806/20/4930851.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_36010375>15 楼</A>zdl1016(【不要给我分,以免影响我性欲】)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于 
2006-08-07 17:03:30 得分 0 </SPAN></H3>
<P>void* &nbsp; 经常作为中间类型来用的,没有直接用void*的 &nbsp; &nbsp; <BR>&nbsp; 这句话很经典<A 
href="http://topic.csdn.net/t/20060806/20/4930851.html#">Top</A></P>
<H4><STRONG>相关问题</STRONG></H4>
<DIV class=relation></DIV></DIV></DIV>
<DIV id=sidebar>
<H3>关键词</H3>
<DIV></DIV>
<H3>得分解答快速导航</H3>
<DIV>
<UL>
  <LI>帖主:<A 
  href="http://topic.csdn.net/t/20060806/20/4930851.html#Top">cuizhu</A> 
</LI></UL></DIV>
<H3>相关链接</H3>
<DIV>
<UL>
  <LI><A href="http://blog.csdn.net/AggView/35/" target=_blank>C/C++ Blog</A> 
  <LI><A 
  href="http://www.dearbook.com.cn/Book/SearchBook.aspx?sortid=7&amp;sorttype=smallsort" 
  target=_blank>C/C++类图书</A> 
  <LI><A href="http://www.codechina.net/resource/sort.php/20" 
  target=_blank>C/C++类源码下载</A> </LI></UL></DIV>
<H3>广告也精彩</H3>
<DIV>
<SCRIPT 
src="c语言强制类型转换 C-C++ - C语言 - CSDN社区 community_csdn_net.files/show_ads.js" 
type=text/javascript></SCRIPT>
</DIV>
<H3>反馈</H3>
<DIV>请通过下述方式给我们反馈<BR><IMG alt=反馈 
src="c语言强制类型转换 C-C++ - C语言 - CSDN社区 community_csdn_net.files/feedback.gif"></DIV></DIV>
<DIV class=clear></DIV></DIV>
<DIV class=CSDN-PHF id=CSDNPF>
<HR>
<A class=biaoshi 
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010" 
rel=external>&nbsp;</A> 
<DIV><A href="http://www.csdn.net/intro/intro.asp?id=2" rel=external>网站简介</A>-<A 
href="http://www.csdn.net/intro/intro.asp?id=5" rel=external>广告服务</A>-<A 
href="http://www.csdn.net/map/map.shtm" rel=external>网站地图</A>-<A 
href="http://www.csdn.net/help/help.asp" rel=external>帮助</A>-<A 
href="http://www.csdn.net/intro/intro.asp?id=9" rel=external>联系方式</A>-<A 
href="http://job.csdn.net/Jobs/f9c75c9f2ad14404a604669b757b9ed0/viewcompany.aspx" 
rel=external>诚聘英才</A>-<A href="http://www.csdn.net/english/" 
rel=external>English</A>-<A 
href="javascript:navigate('mai'%20+%20'lto:'%20+%20'webm'%20+%20'aster@c'%20+%20'sdn.n'+'et?subject=向CSDN报告问题')" 
rel=external>问题报告</A></DIV>
<DIV>北京百联美达美数码科技有限公司&nbsp;&nbsp;版权所有&nbsp;&nbsp;京 ICP 证 020026 号</DIV>
<DIV>Copyright © 2000-2006, CSDN.NET, All Rights Reserved</DIV>
<SCRIPT src="c语言强制类型转换 C-C++ - C语言 - CSDN社区 community_csdn_net.files/counter.js" 
type=text/javascript></SCRIPT>

<SCRIPT 
src="c语言强制类型转换 C-C++ - C语言 - CSDN社区 community_csdn_net.files/jsframework.js" 
type=text/javascript></SCRIPT>

<SCRIPT type=text/javascript>/*<![CDATA[*/Include("Csdn.IM.NoticeWindow");/*]]>*/</SCRIPT>

<SCRIPT 
src="c语言强制类型转换 C-C++ - C语言 - CSDN社区 community_csdn_net.files/clickeye.js"></SCRIPT>

<HR>
</DIV></DIV></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -