- C++primer:每次调用一个函数,都会重新建立一个形参(类似于临时变量),传入的实参作为初始化值拷贝给形参,一旦实参的值拷贝给形参后,形参和实参其实是两个不同的对象了
- 如果我们将一个int变量传入,改变值是不生效的
void member_change(int a)
{
a++;
}
int main()
{
int a = 1;
//int* p = &a;
//cout << &p << endl;
//ptr_change(p);
//cout << &p << endl;
cout << a << endl;
member_change(a);
cout << a << endl;
return 0;
}
/*
1
1
*/
- 如果将一个指针传入,当我们试图改变指针指向的内容时,是可以生效的。
void ptr_change(int* p)
{
int a = 2;
*p = a;
}
int main()
{
int a = 1;
int* p = &a;
cout << *p << endl;
ptr_change(p);
cout << *p << endl;
cout << a << endl;
return 0;
}
/*
1
2
2
*/
- 当我们试图改变指针指向的时候,实际上是不行的。
void ptr_change(int* p)
{
int a = 2;
int* b = &a;
p = b;
}
int main()
{
int a = 1;
int* p = &a;
cout << &p << endl;
ptr_change(p);
cout << &p << endl;
return 0;
}
/*
0000000EBC71FAF8
0000000EBC71FAF8
*/
- 局部变量作为形参传入时,会复制给形参作为临时变量,本身的值不能被改变,改变的只是在函数内部的临时变量,也就不能改变指针的指向。
-
- 但是指针的值作为地址的时候,它的指向的空间是真实的,也就是说,我们即使在函数内部 *** 作的是该形参,当我们利用这个值去修改的确存在的内存时,是有效的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)