c++函数的参数传递

继前边已经写过的 指针的 相关内容(点击理解指针参考),这篇文章写写函数的参数传递~~~因为二者分不开的

搜 “函数的参数传递”, 很多时候看到的是函数的三种传递方式~~~

那么这三种参数传递方式有没有什么共同点呢?或者说它们的实质到底是怎样的呢?

(1)、写一个带有参数的函数
返回值类型 函数名(形参列表){//参数列表之间用 , 隔开
    ....//操作代码
    return 返回值类型的变量或者常量;
}

那么形参列表怎么写呢?

其实我们可以按照  定义一个变量的写法  来写形参列表,什么意思呢?

定义一个int型变量代码为 int a; (或者int a=2;) ; 那么在形参列表里边可以写 int a

定义一个char型变量代码为 char b;(或者char b='s';); 那么在形参列表里边可以写 char b

定义一个指针变量代码为 int *p;那么我们在形参列表里边可以写 int *p

定义一个引用变量代码为 int &d=a; 那么我们在形参列表里边可以写  int &d

大家有没有发现什么规律呢?

那就是写形参列表的时候,只要写出  相对应的定义代码的等号“=”  之前的部分就好了~~~~~

或许大家不禁要问 这样写对不对呢?有依据吗?

下面来解释一下~~~~~

(2)、参数传递的实质

我们知道函数的参数列表是用来接收外部送来的信息的,可以理解为接受输入

void test1(int a, int *p, int &d){
    ...
}
int main(){
    int aa=1;
    int ad=2;
    int arrayP[2]={8,9};
    int *pp=arrayP;
    int &dd=aa;
    test1(aa, pp, dd);//调用函数test1
    return 0;
}

在调用函数(main(实参列表)) 调用 被调用函数(test1(形参列表)) 的时候,要进行参数传递,这个过程的进行其实就是一个定义以及赋值~~~

其实执行的是下边的语句:

int a=aa; //系统为 a 分配空间,将 aa 的值赋值给a

int *p=pp; //系统为 p 分配空间,将 pp 的值赋值给p 

int &d=dd; //系统为 d 分配空间,给 dd 所代表的空间取了另一个名字 d,d 的值 和 dd 的值是一个实体

可以理解为 形参是定义语句中等号之前的部分,函数被调用的时候 实参 是等号之后的部分,调用的时候进行了定义和赋值操作,形参=实参~~~~~

现在有没有理解了 形参的写法呢?


现在来想一想下边的问题,我们在 test1 代码里:

修改 a 的值,会改变 aa 的值吗?不会,因为 a 和 aa 代表的是不同的空间呀~~~~~

修改 p 的值,会改变 pp 的值吗?不会,因为 p 和 pp 代表的是不同的空间呀~~~~~

在不修改 p 值的情况下,修改 *p 的值,会改变 *pp 的值吗?会的,因为 p 和 pp 是相同的地址,指向的是同一个空间呀,只要改变了这个空间中的内容,这个内容就变了~~~~~

修改 d 的值,会改变 dd 的值吗?会的,因为 d 和 dd 代表的是一样的东西,不管通过哪个名字(d 或者是 dd)将这个东西改变了,那这个东西就变了~~~~~

(3)、关于数组形参的写法

数组的形参写法有两种,一种是 int array[](或者是 int array[常量] ), 另一种是 int *array。可以参考c++定义一个数组一定要给出长度吗?

其实定义数组有两种定义方式,静态和动态:

int array[10]={1,2,3,4,5,6,7,8,9,0};//静态定义方式

int array[]={1,2,3,4,5,6,7,8,9,0};//静态定义方式


int num=10;

int * array=new int[num];//动态定义方式,num可以为变量,可以为常量

所以数组在形参列表中的写法可以有两种,一种静态写法,一种是动态写法~~~~~

(只不过 如果套用上边的 “形参=实参”,得到的是int array[]=arrayarray; 这个写法是不正确的,但是可以不必再想太多,在形参列表里写 定义变量语句等号左边的内容就好了~~~~~)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值