首先要理解,参数传递是会复制的
main() {
foo();
}
void foo(void) {
int num = 1;
_foo(num);
print("foo num is " + num);
}
void _foo (int num) {
print("_foo num is " + num);
num = 2;
}
\> _foo num is 1
\> foo num is 1
在调用 _foo 时,另外开辟了内存空间将 num 内容复制拷贝了一份进去,所以 _foo 方法对参数做修改,原始参数不会发生改变。
但是如果想要对方法传入的对象进行修改要怎么做呢?
void foo(void) {
int num = 1;
_foo(&num);
print("first num is " + num);
}
void _foo (int *num) {
print("second num is " + *num);
*num = 2;
}
\> _foo num is 1
\> foo num is 2
入参改为指针,仍然会开辟一份新空间保存传入的指针,但是对指针修改仍然会影响相同的变量内容。
另外如果传递的是结构体而且这个结构体比较大,传递结构体指针会减小拷贝的性能消耗。
总结:
1、需要修改传入方法参数的原始内容,需要传指针;
2、避免较大体积结构体对性能消耗,需要传指针
网友评论