*与*&的问题。

renzha0013 2011-05-01 11:29:26
void ptr(int* &t)
{
if(t==NULL)
{
t=new int;
*t=3;
cout<<*t<<endl;
}
else
{
*t=4;
cout<<*t<<endl;
}

}



int *t=NULL; //*t为空 这时候必须为(int* &t)才能修改原来*t的值。
cout<<*t<<endl;
ptr(t);
cout<<*t<<endl;
return 0;
//////////////////////////////////////////////////////
void ptr(int* t)
{
if(t==NULL)
{
t=new int;
*t=3;
cout<<*t<<endl;
}
else
{
*t=4;
cout<<*t<<endl;
}
}
int a=0;//*t不为空。
int*t=&a; //这时候可以不加&。
cout<<*t<<endl;
ptr(t);
cout<<*t<<endl;
return 0;



差别在*t为空或不为空,参数加不加&的问题。为什么?
...全文
75 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
renzha0013 2011-05-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 newstudent_never 的回复:]
形参 与 实参的问题。。 要说多少遍啊。。。 仔细读下面的例子, 一会将 指针的引用*&

例如 void init(char* p){ p = malloc(……);} , 就拿这个例子来说。
记住 形参只是实参的一个副本 而已,即它们的内容一样,但是是两个变量。。。

如果你调用 init 初始化一个变量 pHead = NULL, 那么就会
pHead --> NULL ……
[/Quote]谢谢,我懂了。呵呵。
renzha0013 2011-05-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ysm_real 的回复:]
区别:传指针和传指针引用
1.传指针:我们是拷贝一份地址传过去,那么对于该地址块上值的修改则会影响实参(即main()函数中的t的值),但仅限于对该地址块,所以如果实参指针为空,而你在函数中重新申请空间,注意这时候地址空间变了,就像你main()函数中的t依旧为空,因为函数ptr中没有对实参t的值做改变,因此,cout<<*t<<endl;会出错,因为t为NULL.
2.传指针的引用:相信LL……
[/Quote]谢谢,我懂了。
xmu_才盛 2011-05-01
  • 打赏
  • 举报
回复
形参 与 实参的问题。。 要说多少遍啊。。。 仔细读下面的例子, 一会将 指针的引用*&

例如 void init(char* p){ p = malloc(……);} , 就拿这个例子来说。
记住 形参只是实参的一个副本 而已,即它们的内容一样,但是是两个变量。。。

如果你调用 init 初始化一个变量 pHead = NULL, 那么就会
pHead --> NULL <-- p (p是 pHead的一个副本)
当分配内存时, 并不是给 pHead分配,而是给 p分配, 也就是如下情况
pHead --> NULL p --> 内存

所以通常C语言中 对于上述的应用一般采取 二级指针的形式,即void init(char** p){*p = new (……);}


而c++中引入了引用这个运算符,所以就大不一样了, 引用传入的就是本身,而不是副本了。。

所以 void init(char*& p){ p = malloc(……);}, 这个时候 p 就完全是 pHead。

这个例子和lz你的一样吗?
ysm_real 2011-05-01
  • 打赏
  • 举报
回复
区别:传指针和传指针引用
1.传指针:我们是拷贝一份地址传过去,那么对于该地址块上值的修改则会影响实参(即main()函数中的t的值),但仅限于对该地址块,所以如果实参指针为空,而你在函数中重新申请空间,注意这时候地址空间变了,就像你main()函数中的t依旧为空,因为函数ptr中没有对实参t的值做改变,因此,cout<<*t<<endl;会出错,因为t为NULL.
2.传指针的引用:相信LL知道引用吧,你如果只传引用,那么效果和指针一样,但你现在传的是指针的引用,则函数中对t的一切修改都会影响到main()中的实参t,所以函数ptr()中为t的别名申请空间,main()中的t的内存空间同样发生改变。
renzha0013 2011-05-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hnuqinhuan 的回复:]
加&表示按引用传值
[/Quote]
我知道加& 按引用传值,但是这边为什么 *t为null 和*t不为NULL 时,对*t改变会产生区别。
無_1024 2011-05-01
  • 打赏
  • 举报
回复
加&表示按引用传值
wanmeiluck123 2011-05-01
  • 打赏
  • 举报
回复
int* &t与int* t的区别

65,186

社区成员

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

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