请教高手一个关于指针的问题

chengliangLEO 2008-10-22 12:50:52
我在一篇关于C++内存使用的文章中看到以下代码:
void MyFunc(char* &pReturn,size_t size){
pReturn=(char*)malloc(size);
memset(pReturn,0x00,size);
if(size>=13)
strcpy(pReturn,"Hello World!");
}

void main(){
char *pMyReturn=NULL;
MyFunc(pMyReturn,15);
if(pMyReturn!=NULL)
{
char *pTemp=pMyReturn;
while(*pTemp!=''\0'')
cout<<*pTemp++;
pTemp=NULL;
strcpy(pMyReturn,"AAAAAAAA");
free(pMyReturn);
pMyReturn=NULL;
}
}

这里想问一下 开始函数MyFunc里的参数"char* &pReturn"是什么意思?起到什么作用呢?为什么不是"char* pReturn"? 多谢高手赐教
...全文
112 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2008-10-22
  • 打赏
  • 举报
回复
这里想问一下 开始函数MyFunc里的参数"char* &pReturn"是什么意思?

这个是指针的引用!一般来说,我们的指针都指向一块地方!,引用就是一个东西的不同称谓!

所以,指针的引用呢,也就是对一个指针的另一个称谓:

比较下面俩:

int i=10;
int * p =&i;
int * r = p;
int* &q=p;


那么pq其实就是一个东西、而pr是俩东西:

如果你

int b = 20;

q = &b;//这句执行完了,那么p也就指向b了

r = &b;//这句执行完了,那么p还是指向i;

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



起到什么作用呢?为什么不是"char* pReturn"? 多谢高手赐教

作用我上面说了!下面理解咋会这么用:

因为在调用的时候传过来的是NULL,这个是一个不确定值,也就是空值,那么你在函数里根本拿不到传过来的那个指针,因为没有地址!
所以,在函数里malloc后,就不能给那个NULL指针赋上去!

所以采用引用就可以!

---------------------------------------
kkndciapp 2008-10-22
  • 打赏
  • 举报
回复
引用
chenzhp 2008-10-22
  • 打赏
  • 举报
回复
返回对指针的引用,因为该指针在函数内部会改变,所以这样写实际上也是传址的一种体现
CrazyBm 2008-10-22
  • 打赏
  • 举报
回复
你应该google"C++引用"

jackzhhuang 2008-10-22
  • 打赏
  • 举报
回复
这么理解,楼主你看能明白吗?

typedef char* PCHAR
PCHAR& pReturn

char*& pReturn通俗说来,就是指针的别名。

为什么要写成别名?而不是直接传指针进去?

请看:

void f(char * p)
{
p = new char[128];
}

int main()
{
char * pText = 0;
f(pText);
}


pText没有获得new分配的空间。为什么?因为参数p是pText的拷贝,也就是说pText传入f函数里面的时候复制了一个新的指针p,该指针p和pText一样指向同一个地址。
但是,当p = new char[128];的时候,这个被复制出来的指针指向了new返回的地址,而pText仍然指向原来的地址。
因此,pText没有获得内存空间。

改成 char* & 别名后,p是pText的别名,也就是pText在函数f中的称呼,p与pText是同一个指针,这样给p分配内存,就是给pText分配,达到了预期目的。
Icee_sun 2008-10-22
  • 打赏
  • 举报
回复
是char *的一个引用,当调用函数时,在栈上开辟对应参数列表的内存,用于存储传递过来的参数,也就是在函数调用时,若是char*的话,就会创建一个临时变量用于存储传递过来的char*类型的参数,若是char* &,就不会开辟这个临时变量并拷贝参数,而是直接使用。
liubuweiright 2008-10-22
  • 打赏
  • 举报
回复
char *pMyReturn=NULL; //试想一下,char pMyReturn 则函数void MyFunc(char* pReturn,size_t size){ ...}
liubuweiright 2008-10-22
  • 打赏
  • 举报
回复
void MyFunc(char* &pReturn,size_t size) //pReturn 也是按值传递,

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧