2017-05-03 73 views
-1

我有一個函數,動態分配內存並保持地址在其本地指針。我想在調用者函數中使用該地址。 是的,我可以使用return.But做到這一點,但有可能使用函數的參數來做到這一點?函數是否可能使用其參數返回指針?

#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 
+1

有很多不同的方法來做到這一點,哪一個最好取決於應用程序。在這種情況下,返回指針顯然更好。 –

+0

備註:實際上你不太需要使用'malloc',所以儘量不要。 – StoryTeller

+1

@DavidSchwartz - 重複的段落明確指出「**這個問題在這裏已經有了答案:**」。鏈接上的接受答案非常多。 – StoryTeller

回答

1

是的,你可以做到這一點,通過傳遞按引用:

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

OT:是不是temp多餘?
OT2:別忘了free指針在main()的末尾。

+1

OT3:不要使用'malloc C++中的''或'free' –

+0

OT4:爲什麼要動態地分配一個微不足道的'int'? –

2

風格上最好返回如果您在函數體中分配內存(因爲這是C標準庫函數的作用),分配的指針。但是把它當作一個參數是可能的,但你需要的間接的附加級別:

void getAddress(int **ptr){ 

*ptr=temp; 
在函數體

,並

getAddress(&ptr); 

在呼叫現場。另一種方法是通過參考傳遞指針

void getAddress(int*& ptr){ 

在其可讀性的主叫站點爲代價需要更少的變化或許。