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

Fun(ClassA *& ca)语法解读解决办法

2012-09-16 
Fun(ClassA *& ca)语法解读一个函数原形是Fun(ClassA *& ca),对*&这样的语法研究得不多,以为是对指针的取

Fun(ClassA *& ca)语法解读
一个函数原形是Fun(ClassA *& ca),对*&这样的语法研究得不多,以为是对指针的取引用,但貌似按此来转化类型未能通过编译.求解释.

[解决办法]
指针的引用,传递指针的话,就不能对指针本身的值进行修改,可以改变指针指向的值,如果是引用的话,就可以改变指针本身的值。
例如比较常见的问题
void fun(int*& p)
{
 p = new int[10];
 //...
 for(int i=0; i != 10; ++i)
 {
p[i] = i + 1;
 }
}

// 调用
int* p = NULL;
fun(p);
printf("%d", p[3]);
[解决办法]
因为c++是严格数据类型检查
你如果直接传递一个指针进函数
c++必须明确的知道这个指针所指向的数据类型
这样才好调用该指针所对应的类对象的虚函数

假设有这样一种情况
CDerived : public CBase;
CDerived d;
CBase *p = &d;
函数声明void Fun(ClassA *& ca);
调用:Fun(p);
这时编译器就不知道你的p所指向的对象到底是CDerived还是CBase了
因为基类指针可以指向派生类对象,也就产生了一对多的关系,指针出现了多义性
这时你在函数调用的时候就要强制设定参数类型,来消除这个多义性

热点排行