注意指针做形参的时候,可能会把指针所指的值修改掉。
注意指针做形参的时候,可能会把指针所指的值修改掉。
参数传递
形参的类型决定了形参和实参的交互方式。
如果形参是引用类型,它将绑定到对应的实参上(传引用参数);否则,将实参的值拷贝后赋给形参(传值参数)。
传值参数
传值参数有2种方式:
1.将实参的实际值复制给函数的形参。在这种情况下,修改函数内的形参对实参没有影响。
2.将参数的地址复制给形参(指针)。因为指针使我们可以见间接地访问它所指的对象,所以通过指针可以修改它所指对象的值。
#include "pch.h"
#include <iostream>
#include <string>
using namespace std;
int reset(int i);
void reset1(int* pi);
int main()
{
int num = 10;
cout << "reset: " << reset(num) << endl; // 20
cout << "num: " << num << endl; // 10
cout << "num的地址:" << &num << endl; // num的地址:001FFD04
reset1(&num);
cout << "reset1: " << num << endl; // 20
cout << "num的地址:" << &num << endl; // num的地址:001FFD04
return 0;
}
//传递实参的实际值,将实参的值拷贝给形参,函数体种修改的是形参的值,对实参不产生影响
int reset(int i)
{
i *= 2;
return i;
}
//传递实参的地址,修改*pi的值,就是修改实参指向的对象的值,修改pi的值,是修改的形参存储的地址,不影响实参的地址。
void reset1(int* pi)
{
*pi *= 2;
pi = 0;
}
形参的类型决定了形参和实参的
函数的形参在执行完以后会回收,不对实参产生影响,如果直接作用于地址,可以修改改指针地址中的实参,但是地址不会变。
int reset(int i) {
i *= 2;
return i;
}
void reset1(int* pi) {
*pi *= 2;
pi = 0;
}