参数的传递方式有两种:传值和传地址。
传值
传值方式是将实参的值复制到形参中,因此实参和形参是两个不同的变量,各有各的存储空间,函数形参可以看做是函数的局部变量。如图:
vcq1ss61xCYjMjA1NDA7o6yx3MPiwcvSu9Cpsrux2NKqtcS4sdf308OhozwvcD4KPHA+PGJyPgo8L3A+CjxwPsD9yOejujwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;">#include
执行结果:
从结果可以看出,在调用过程中,当把实参a=1赋给了形参i后,i自加1,输出i=2;但是实际上并没有影响到实参a的值,调用完成之后,a的值还是1.
传地址
学过二代语言的人可能都接触过对寄存器的操作,在一些底层的语言中,对数据的读取操作中,有很大一部分是直接对地址中的数据来读写的,在高级语言中传递址的方式来传递参数虽然是通过指针引用这些实现的,但是原理感觉还是通过数据的地址对数据进行操作的,这种操作时对数据的直接操作。
例如:
#includeusing namespace std; void test(int * i); int main() { int a; a=1; test(&a); cout<<"a="<
执行结果:
![]()
其中,将形参i定义成指针类型,在使用时,指向a的内容,当调用test时,直接了改变a的值。