2011-03-12 106 views
12

我試圖返回從函數參數的數據指針:如何返回一個指針作爲函數參數

bool dosomething(char *data){ 
    int datasize = 100; 
    data = (char *)malloc(datasize); 
    // here data address = 10968998 
    return 1; 
} 

但是當我調用該函數以下面的方式,數據地址變爲零:

char *data = NULL; 
if(dosomething(data)){ 
    // here data address = 0 ! (should be 10968998) 
} 

我在做什麼錯?

+1

你真的在使用C還是使用C++(有些註釋表明你談論C++引用)。 – 2011-03-13 00:16:20

+0

我沒有把它標記爲C++,因爲我不知道它很重要,人們經常抱怨「那不是C++多數民衆贊成在c」,因爲我使用malloc()... – Rookie 2011-03-13 00:18:21

回答

21

你在傳遞價值。 dosomething修改其本地副本data - 調用者永遠不會看到這一點。

使用此:

bool dosomething(char **data){ 
    int datasize = 100; 
    *data = (char *)malloc(datasize); 
    return 1; 
} 

char *data = NULL; 
if(dosomething(&data)){ 
} 
+0

哦該死...我看到,指針指針..但是還沒有其他方法可以做到這一點?如果我看到的函數在沒有&的情況下需要一個指針,是否有可能通過這種方式來轉換我的函數工作? (我喜歡它沒有,因爲它不太容易出錯) – Rookie 2011-03-13 00:04:00

+0

你可以做'char * dosomething(char *)'並返回新的指針。 – Erik 2011-03-13 00:06:33

+0

但我想從函數返回bool值,我的意思是如果我可以用任何方式調用函數'dosomething(data)'而不是'dosomething(&data)'?也許在C++? – Rookie 2011-03-13 00:09:37

2
int changeme(int foobar) { 
    foobar = 42; 
    return 0; 
} 

int main(void) { 
    int quux = 0; 
    changeme(quux); 
    /* what do you expect `quux` to have now? */ 
} 

這是你的片斷同樣的事情。

C通過一切的價值。

相關問題