社区
C++ 语言 帖子详情 请教高手一个关于指针的问题 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"? 多谢高手赐教
...全文
88 8 打赏 收藏 请教高手一个关于指针的问题 我在一篇关于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) { ch 复制链接
扫一扫 分享 转发到动态 举报
写回复 配置赞助广告取 消
确 定
用AI写文章 8 条回复 切换为时间正序 请发表友善的回复… 发表回复 打赏红包 需支付: 0.00 元 取 消 确 定 太乙 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 也是按值传递,
0x00000000内存不能为read修复工具 个0值,这时返回值“0”已不表示新启用的指针,而是系统向应用程序发出的一个通知,告知出现了错误。 作为应用程序,在每一次申请内存后都应该检查返回值是否为 0,如果是,则意味着出现了故障,应该采 取一些措施... 游戏画面就弹出内存不能为read修复工具 如果去请教一些「高手」,得到的回答往往是「Windows就是这样不稳定」之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分析这种错误的一般原因。 一、应用程序没有检查内存分配失败 ... C语言-谭浩强 配套练习册 对于初学者而言,建议先通读谭浩强教授的《C语言程序设计》一书,理解每个章节的基本概念后,再配合练习册进行实践操作。不要急于求成,遇到难题时,多思考,尝试不同的解题方法,必要时可以查阅相关资料或向他人... gpio_typedef_请教高手: 本人刚接触STM32,定义了GPIO_TypeDef* GPIOx,则GPIOx表示一个指针吗?为何不是用*GPIOx == GPIO... 匿名用户1级2012-04-20 回答#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)这是在stm32f10x.h里定义的,看这个定义你就应该明白了,GPIOA本身也是一个指针追问:谢谢你的回答!想再请教个几个问题1 因为资料库里面... c语言结构体指针菜鸟教,菜鸟请教C语言结构体指针实例化的问题? 该楼层疑似违规已被系统折叠隐藏此楼查看此楼在函数中对结构体赋值时赋不上,用printf查看结果始终为0,有人说是因为结构体指针使用前没有进行实例化导致。一知半解没明白什么叫实例化,好像是要用malloc分配内存。...
C++ 语言
65,203
社区成员
250,519
社区内容
发帖 与我相关 我的任务 C++ 语言 C++ 语言相关问题讨论,技术干货分享,前沿动态等 复制链接
扫一扫 分享 确定 社区描述 C++ 语言相关问题讨论,技术干货分享,前沿动态等 c++ 技术论坛(原bbs) 社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子请不要发布与技术无关的招聘、广告的帖子请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章