在c/c++编程中,什么时候用指针来传递参数?
1.需要改变实参的时候,只能用指针
2.传递大量数据的时候,推荐用指针传递,因为值传递需要拷贝其每个元素,效率太低
3.需要遍历数组或频繁引用其元素时使用指针传递,使用指针(迭代器)遍历数组并赋值的效率总是明显快于下标遍历
4.申请分配堆内存空间时, 必须使用指针
5.传递数组时, 必须使用指针
6.函数返回指针时, 比如fopen()
vector使用指针传参的例子
对于vector容器,在一个函数内我只是想要读取其中的内容,直接用值传递,或者指针传递
int read_v(vector<type> arg){
xxx = arg[0];
....
}
//或者
int read_v(vector<type> *arg){
xxx = (*arg)[0];
....
}
如果必须要修改其中的内容,需要用指针传递
特殊的情况,如果vector里面储存的也是指针,并且需要修改的是其所指向的内容。那么使用值传递和指针传递都可以了,本质上只是读取指针的地址来修改其内容。
int edit_v(vector<type> arg){
*(arg[0]) = xxx;
....
}
//也可以这样写
int edit_v(vector<type> *arg){
*((*arg)[0]) = xxx;
....
}
使用指针传参的错误例子
当调用此函数进行内存分配时,发现不能分配内存不能成功,因为此时形参改变了,但实参并不会改变,他们对应于不同的内存单元。
正确的写法应该是:
这样就能够正确地分配内存了