函数参数:*& ?

Primer__ 2014-09-01 08:00:41
《C++Primer》第四版
7.2.2 引用参数
4.传递指向指针的引用

问题:
1.函数参数:*& ,是什么意思?
怎分解这类,多操作符参数?
2.假设,要改变实参,用引用,或指针,作函数参数就可以了。
为什么,要用*&参数?
...全文
593 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Primer__ 2014-09-05
  • 打赏
  • 举报
回复
函数参数,变量名前,有N个操作符,就应有N+1个初始化语句。 如: *&p; 变量:p,应用到3个初始化语句。 对么?
赵4老师 2014-09-03
  • 打赏
  • 举报
回复
引用即别名 指针即地址
Falleyes 2014-09-02
  • 打赏
  • 举报
回复
引用 2 楼 Falleyes 的回复:
#include<iostream>
#include<iterator>
#include<vector>
using namespace std;

void Print(int*& p){    //&限定必须是可修改的左值
						//然后p为指向这个引用的指针
	cout << *p << endl;
}

int main(){
	int a=1;
	//Print(&a);   不能传入地址,因为地址不是左值
	int* b = &a;
	Print(b);     //传入指针OK
}
嗯?。。。。。。 是指针的引用。
Falleyes 2014-09-02
  • 打赏
  • 举报
回复
作用就是限定参数是指针,如果是地址,会报错,不允许地址隐式转换为指针。
zxvivian 2014-09-02
  • 打赏
  • 举报
回复
*&只可能是引用指针的引用,本身性质是一个引用,他引用了一个指针,是一个指针的别名。 不可能是指向引用的指针,引用本身都没有分配内存,只是一个别名,何来指向一说?
ForestDB 2014-09-02
  • 打赏
  • 举报
回复
LZ又换了个马甲啊。 # include <iostream> using namespace std; void foo(int * & p) { delete p; p = new int(2); } int main() { int * p = new int(1); cout << *p << endl; foo(p); cout << *p << endl; delete p; return 0; } 会用引用,知道为什么用引用,这问题就结了。 不过是引用一个指针而已。
ApplePeels 2014-09-02
  • 打赏
  • 举报
回复
说二维指针的神么心态,指针的引用,有那么难理解么?
lm_whales 2014-09-02
  • 打赏
  • 举报
回复
指针的引用用法,和其他引用用法相同 举例如下:

int a[5];
int *ptr = a;//用数组名初始化指针
int *& ref_p = p;//用指针初始化指针的引用
int *&ref_q = rref_p;//用指针初始化指针的引用

void fun_p(int *p){
      int x = *p;
      printf("%d",*p);
}
void fun_rp_100(int *& p){
*p=100;
printf("%d",*p);
return p;
}


void fun_rp(int *& p){
 p = new int[10];
p[0]= 100;
printf("%d",*p);
return p;
}

int main(){
int a[5];
int *p = a;
int *& rp = p; //指针的引用,和其他类型引用没什么不同,它是指针的别名。
fun_p(a);//通过指针传递,表达式a,当作指针用
fun_p(p);//通过指针传递,
fun_rp_100(p);//通过指针引用传递,可以改变指针指向的内存中的值,此处和指针用法一致。
//fun_rp_100(a);// 错误,a 不是一个指针,没有办法引用它
fun_rp(p);// 通过指针引用传递,可以改变指针的值,此处和指针用法有所不同,但是和其他引用类型是一致的。
delete []p;// new[] 分配的内存要用delete []释放
fun_rp(rp);// 可以改变指针的值,指针引用就是某个指针的别名,
                    //所以rp的值,也就是p的值被改变了
delete []rp;// new[] 分配的内存要用delete []释放
// delete []rp 和delete []p 是一样的。
// 因为引用就是被引用对象的别名,二者是同一个对象。

return 0;
}
mujiok2003 2014-09-02
  • 打赏
  • 举报
回复
int *& p;
是p is a reference to a pointer to int英文从右边往左边读。

int a[5];
*&a[3] = 5; // 和a[3] = 5;是一样的。 
半醉看夕阳 2014-09-02
  • 打赏
  • 举报
回复
指针的引用,指针也是一种数据结构,难道不能引用?
白衣如花 2014-09-02
  • 打赏
  • 举报
回复
指针的引用 以后你要用一个函数对类的对象进行修改的时候,就会用到了 之所以用引用传值,是想在函数中进行的修改,能对原来对象发生改变

int a = 2;
int b = 3;
void ChangeRef(int * & p)
{
  p = &b;
}

void Change(int * p)
{
   p = &b;
}

int main()
{
  int *p = &a;
  cout << *p;
  Change(p);
  cout << *p;
  ChangeRef(p);
  cout << *p;
  return 0;
}
Primer__ 2014-09-02
  • 打赏
  • 举报
回复
楼上各位: 7,8楼问题?
Pump天天学习 2014-09-01
  • 打赏
  • 举报
回复
lz比较一下异同 1.

void func(int *p){
     p=new int(5);
}
int main()
{
	int *p=NULL;
	func(p);
	cout<<*p;
}
2.

void func(int *&p){
     p=new int(5);
}
int main()
{
	int *pInt=NULL;
	func(pInt);
	cout<<*pInt;
}
3.

void func(int **p){
     *p=new int(5);
}
int main()
{
	int *pInt=NULL;
	func(&pInt);
	cout<<*pInt;
}
Primer__ 2014-09-01
  • 打赏
  • 举报
回复
楼上: 二维指针,有什么作用?
Primer__ 2014-09-01
  • 打赏
  • 举报
回复
楼上: 二维指针,有什么作用?
Primer__ 2014-09-01
  • 打赏
  • 举报
回复
楼上: 二维指针,有什么作用?
derekrose 2014-09-01
  • 打赏
  • 举报
回复
其实传的就是二维指针
Primer__ 2014-09-01
  • 打赏
  • 举报
回复
3. 什么情况下,函数参数用到:*&? 交换实参,用指针,或引用,不就可以了么。
Primer__ 2014-09-01
  • 打赏
  • 举报
回复
1.

int x=1;
int *z=&x;

int x=1;
int &y=x;
int *z=&y;
上面是定义,和初始化变量:*&z,对么? 这两种方法,都一样,是不是? 2. *&z,是指向引用的指针? 还是,指向指针的引用?
Primer__ 2014-09-01
  • 打赏
  • 举报
回复
1楼: 书上说是:指向指针的引用?
加载更多回复(5)

64,652

社区成员

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

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