64,652
社区成员
发帖
与我相关
我的任务
分享
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;
}
int *& p;
是p is a reference to a pointer to int英文从右边往左边读。
int a[5];
*&a[3] = 5; // 和a[3] = 5;是一样的。
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;
}
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;
}
int x=1;
int *z=&x;
int x=1;
int &y=x;
int *z=&y;
上面是定义,和初始化变量:*&z,对么?
这两种方法,都一样,是不是?
2.
*&z,是指向引用的指针?
还是,指向指针的引用?