赞
踩
参数传进来之后只是一个局部变量,修改形参的值不会改变实参的值,也就是在函数里面改变该参数并不会改变主函数里面该变量的值。
#include<iostream>
using namespace std;
void add(int a)
{
a = a + 5;
}
void main()
{
int b = 0;
add(b);
cout << b;
}
输出结果是0,函数里面的加5并没有改变主函数里面的值。
我们再来看看他们的地址:
#include<iostream>
using namespace std;
void add(int a)
{
cout << &a<<endl;
}
void main()
{
int b = 0;
add(b);
cout << &b;
}
输出:
两者地址不一样,传入的参数新开辟了一个内存,所以两者相互独立。
传进来的是一个值,不过这个值是一个地址。
修改传入的形参并不能修改实参,也就是修改这个指针里面的地址不能修改函数外该指针所存放的地址。
#include<iostream>
using namespace std;
void add(int* a)
{
cout << &a<<endl;//获取的是传入的参数的地址
}
void main()
{
int b = 0;
int* a;
a = &b;
add(a);
cout << &a;//获取的是指针a的地址
}
结果:
形参和实参已经是两个相互独立的指针了。
#include<iostream> using namespace std; void add(int *a) { cout << a << endl; a++; cout << a << endl; } void main() { int b = 0; int* c; c = &b; add(c); cout << c; }
输出结果:
因为两者独立,所以函数内指针的改变并不会改变函数外的指针;假如传入的时候指针c指向b,在函数里让c指向a,在函数外面c依然是指向b。
不过虽然形参和实参不是同一个指针,但还是可以通过指针里面保存的地址来修改指针保存的地址里面的值。
#include<iostream>
using namespace std;
void add(int *a)
{
*a = *a + 5;
}
void main()
{
int b = 0;
int* c;
c = &b;
add(c);//替换成add(&b)也可以,因为传指针的本质就是传地址。
cout << *c<<" "<<b;
}
输出结果是5 5;可以通过函数改变指针所指向的地址的值。也就是通过指针c所保存的b的地址修改了b的值。
引用就相对于结构体的别名,和变量名指的是同一个变量。修改形参的值会改变实参的值,也就是说在函数内部可以通过修改传入的参数修改函数外的值。
#include<iostream>
using namespace std;
void add(int &a)
{
a = a + 5;
}
void main()
{
int b = 0;
add(b);
cout << b;
}
输出结果为5;
传值时,在函数内修改传入的参数不会对函数外的数据造成影响。
传指针和传引用可以分别通过修改传入参数、修改传入地址所指向的数据来修改函数外的数据。
传指针在函数内修改指针的指向并不会影响函数外该指针的指向。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。