函数是否可能使用其参数返回指针?

时间:2017-05-03 08:28:04

标签: c++ function pointers

我有一个动态分配内存并将地址保存在本地指针中的函数。我想在调用函数中使用该地址。 是的,我可以使用return来做到这一点。但是可以使用函数的参数吗?

#include<bits/stdc++.h>
using namespace std;
void getAddress(int *ptr){
    int *temp=(int*)malloc(sizeof(int));
    ptr=temp;
    cout<<ptr<<endl;
} 
int main(){
    int *ptr=NULL;
    cout<<ptr<<endl;
    getAddress(ptr);
    cout<<ptr<<endl;
    return 0;
}
output : 
0
0x6fa010
0

Expected output :
0
0x6fa010
0x6fa010

2 个答案:

答案 0 :(得分:2)

如果在函数体中分配内存(就像C标准库函数所做的那样),在风格上最好返回分配的指针。但是可以将它作为参数传递,但是你需要额外的间接级别:

void getAddress(int **ptr){

*ptr=temp;

在函数体中,

getAddress(&ptr);

在通话网站上。另一种方法是通过引用传递指针

void getAddress(int*& ptr){

这可能需要更少的更改,但这可能会牺牲主叫站点的可读性。

答案 1 :(得分:1)

是的,你可以通过传递参考来实现:

void getAddress(int *&ptr){
//                   ~
    int *temp=(int*)malloc(sizeof(int));
    ptr=temp;
    cout<<ptr<<endl;
} 

OT:不是temp多余的吗? OT2:不要忘记free main()末尾的指针{/ 1}。