<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="如何理解c和c++的复杂类型声明" id="card1">
<p> 游客</p><p>
标题:如何理解c和c++的复杂类型声明<br/>
正文:<br/>
曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗？本文将由易到难，一步一步教会你如何理解这种复杂的C/C++声明。　　我们将从每天都能碰到的较简单的声明入手，然后逐步加入const修饰符和typedef，还有函数指针，最后介绍一个能够让你准确地理解任何C/C++声明的&amp;ldquo;右左法则&amp;rdquo;。　　需要强调一下的是，复杂的C/C++声明并不是好的编程风格；我这里仅仅是教你如何去理解这些声明。注意：为了保证能够在同一行上显示代码和相关注释，本文最好在至少1024x768分辨率的显示器上阅读。让我们从一个非常简单的例子开始，如下：int n;这个应该被理解为&amp;ldquo;declare n as an int&amp;rdquo;（n是一个int型的变量）。接下去来看一下指针变量，如下：int *p;这个应该被理解为&amp;ldquo;declare p as an int *&amp;rdquo;（p是一个int *型的变量），或者说p是一个指向一个int型变量的指针。我想在这里展开讨论一下：我觉得在声明一个指针（或引用）类型的变量时，最好将*（或&amp;amp;）写在紧靠变量之前，而不是紧跟基本类型之后。这样可以避免一些理解上的误区，比如： 再来看一个指针的指针的例子：char **argv;理论上，对于指针的级数没有限制，你可以定义一个浮点类型变量的指针的指针的指针的指针，再来看如下的声明：int RollNum[30][4];int (*p)[4]=RollNum;int *q[5];这里，p被声明为一个指向一个4元素（int类型）数组的指针，而q被声明为一个包含5个元素（int类型的指针）的数组。另外，我们还可以在同一个声明中混合实用*和&amp;amp;，如下：int **p1;// p1 is a pointer  to a pointer  to an int.int *&amp;amp;p2; // p2 is a reference to a pointer  to an int. int &amp;amp;*p3; // ERROR: Pointer  to a reference is illegal. int &amp;amp;&amp;amp;p4;// ERROR: Reference to a ref<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=340&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=340&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=340&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=340&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=340&amp;Page=8">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=340">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=340">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>