C函数参数传递*& 和*区别的研究

众所周知,&是取地址,函数参数前有&是传递地址,*是指针;那*&有什么用呢?下面先看一下众多网友的解释

对于int *&a:  

1.int*& a: a is a reference of pointer to int

  2.c++里面的引用,a是对另一个int *类型变量的引用;

  3.指向指针的指针;

  4.原来a不是int类型,比如说是char类型,那么&a得到的应该是char*类型,现在使用int*强制转换到int*类型。

  观上几种解释,我认为1、2、3是有道理的,4是牛头不对马嘴。

首先,必须要说明的是*&是有用的,效果和单独一个*或&是不同的,对引用有所了解的同学对于引用的引用(指针的指针)也不难理解。下面我们先做个试验

我们要了解变量需要一个空间存储的,这就引出了变量的地址,参数传递是就可以传递地址过去;那么我们也可以把地址放到一个存储空间里,这就有了地址的地址,这里就不得不说一下'->'这个符号,他能从地址或地址的地址找到对象:eg如有一结构体SqList,,方法 void CreateList(SqList *&L.....) 方法中L->data[i] = a[i]。所以传递地址的地址时不必担心使用的复杂。

//程序1

#include <iostream>


using namespace std;


void test(int *&p,int &a)
{
    cout<<&p<<endl;
    //cout<<&a<<endl;
}
int main()
{
    int a = 0;
    int *p = &a;
    cout<<&p<<endl;
    //cout<<&a<<endl;
    test(p,a);
    return 0;
}

这个 程序输出的两个值一样大小一样,说明存储int指针的地址是一样的

//c程序2

#include <iostream>


using namespace std;


void test(int *p,int &a)
{
    cout<<&p<<endl;
    //cout<<&a<<endl;
}
int main()
{
    int a = 0;
    int *p = &a;
    cout<<&p<<endl;
    //cout<<&a<<endl;
    test(p,a);
    return 0;
}

这个 程序输出的两个值不一样,说明存储int指针的地址不相同的

在程序1中可修改p的值,在函数结束后仍能保存修改修改方式可直接为 p = ...

在程序2中有两种修改方式:1.  p = b;2. *p = 4。其中1修改的结果不能再函数外有效,2可以在函数外有效


简而言之,使用*和使用*&要看希望的效果是什么。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值