2011-03-12 98 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通过一切的价值。