首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

C++语法有关问题

2012-01-18 
求助:C++语法问题各位朋友大家好!我正在学习C++语言基础。在《C++Primer第三版》的电子书版本中的第十章函数

求助:C++语法问题
各位朋友大家好!

        我正在学习C++语言基础。在《C++   Primer   第三版》的电子书版本中的第十章函数模板实例化这一节中(423页)我看到以下代码:

----------------------

template   <typename   Type,   int   size>
Type   min(   Type   (&r_array)[size]   )   {   /*   ...   */   }

typedef   int   (&rai)[10];                           //   (?)
typedef   double   (&rad)[20];                     //   (?)

void   func(   int   (*)(rai)   );
void   func(   double   (*)(rad)   );

int   main()   {
//   错误:   哪一个   min()   的实例?
func(   &min   );
}

---------------------------

请问带问号的那两行是什么意思?好像是类型声明,如果是的话,应该是函数类型声明。但是又不像。我有点搞不懂。请高手帮助解答一下。我在书中一时没找到相关介绍。非常感谢!

[解决办法]
typedef int (&rai)[10]; // (?)
typedef double (&rad)[20]; // (?)

其实这两句和一般的typedef没分别``只是看起来怪怪``有了上面的定义,我们可以这样来定义一个有10个元素的整数引用数组,如下
int arr[10];
rai myrefarray = arr;

rad同样``
double darr[20]
rad myrefdarray = darr;


[解决办法]
typedef int (&rai)[10]; //
~~~~~~~~~~~~~~~~~~~~~
映射一个引用,这个引用指向一个包含10个int类型的数组。
typedef double (&rad)[20]; //
映射一个引用,这个引用指向一个包含20个double类型的数组。

看下面的例子,lz会更清楚

typedef int (&rai)[10];
typedef double (&rad)[20];

int fun(rai myrai)
{
int iResut = 0;
for (int i = 0; i < 10; ++i)
{
iResut += myrai[i];
}
return iResut;
}

void func( int (*myfun)(rai) ) // 这里定义的是一个函数指针,函数指针的返回值为
// int ,输入参数为rai,为了说明例子,int (*)(rai),改为int (*myfun)(rai)
// 这样我就可以使用myfun这个函数指针
{
int a[10];
for (int i =0; i < 10; ++i)
{
a[i] = i;
}
cout < < fun(a) < < endl; // 这两者效果相同
cout < < myfun(a) < < endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
func(&fun); // 这里我们传递fun函数的地址过去
system( "pause ");
return 0;
}

热点排行