c_cpp什么时候用指针,什么时候用值传递

⌚Time: 2023-08-06 23:27:10

👨‍💻Author: Jack Ge

在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];

    ....

}

如果必须要修改其中的内容,需要用指针传递




int edit_v(vector<type> *arg){

    (*arg)[0] = xxx;

    ....

}

特殊的情况,如果vector里面储存的也是指针,并且需要修改的是其所指向的内容。那么使用值传递和指针传递都可以了,本质上只是读取指针的地址来修改其内容。


int edit_v(vector<type> arg){

    *(arg[0]) = xxx;

    ....

}

//也可以这样写

int edit_v(vector<type> *arg){

    *((*arg)[0]) = xxx;

    ....

}

使用指针传参的错误例子




void MemAllocate(char *arg){

    arg = (char *)malloc(sizeof(char));

}

当调用此函数进行内存分配时,发现不能分配内存不能成功,因为此时形参改变了,但实参并不会改变,他们对应于不同的内存单元。

正确的写法应该是:


void MemAllocate(char **arg){

    *arg = (char *)malloc(sizeof(char));

}

这样就能够正确地分配内存了