被自己定义的函数弄晕了....
一段解码函数,我把参数定义成了指针的引用
BYTE *&DataHandle::DecodeCode(BYTE *&pSourceBuffer,long& lSourceSize,BYTE *&pDestBuffer)
{
mConfig->pInputBuffer = pSourceBuffer ; //pSourceBuffer :AAC data
mConfig->inputBufferCurrentLength = lSourceSize ; //aac size
mConfig->inputBufferUsedLength = 0;
Int decoderErr;
decoderErr = PVMP4AudioDecodeFrame(mConfig, mDecoderBuf);//解码函数
if (decoderErr==0)
{
memcpy(pDestBuffer,out_buf,4096);//解码输出到pDestBuffer
}
else
{
AfxMessageBox(_T("解码错误!"));
}
return pDestBuffer;
}
于是我调用它,rtpBuff为char*型,char *rtpBuff;
//报错!错误为不能将参数 1 从“BYTE *”转换为“BYTE *&”
BYTE *pDestBuffer = DecodeCode((BYTE*)rtpBuff,plenHeader->data_size,pDestBuffer);//编译器报错!!!!
可是我改成如下就没错了
BYTE *pDestBuffer = DecodeCode((BYTE*&)rtpBuff,plenHeader->data_size,pDestBuffer);//编译器不报错了!!!
指针的引用为参数,那么不就是传个指针进去就行了嘛,为什么还要加个&?????????
求解。。。。
[解决办法]
指针的引用为参数,那么不就是传个指针进去就行了嘛,为什么还要加个&?????????
======
不一样的,传指针引用进去就可以修改原变量的值。这么玩可以达到如下效果:
- C/C++ code
BYTE* data;method_to_get_data(data);if (data==NULL) { // 函数没有给数据}else { // 函数给了你数据}
[解决办法]
BYTE *DataHandle::DecodeCode(BYTE *pSourceBuffer,long& lSourceSize,BYTE *pDestBuffer)
你这样定义函数接口不行吗?为什么还要加&?如果要改变指针的值就用**,没有见过*&这会混用的
[解决办法]
[解决办法]
引用生来就是用来解决使用*指针容易出错的问题的,* 和&一般可以替换。*&类似的替代是** 。指针的引用就是指向指针的指针
[解决办法]
[解决办法]
[解决办法]
[解决办法]
用C写程序 = 踩着鸡蛋跳舞
用C++写程序 = 在核弹上踢足球
千万不要被C++的引用弄混了:
1.统一用指针
2.统一用引用
3.只在一些特殊地方混用,并且贴上所有需要的注释和说明