我正在尝试从函数参数中返回数据指针:
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)
}
我做错了什么?
答案 0 :(得分:25)
你正在经历价值。 dosomething
修改了data
的本地副本 - 调用者永远不会看到它。
使用此:
bool dosomething(char **data){
int datasize = 100;
*data = (char *)malloc(datasize);
return 1;
}
char *data = NULL;
if(dosomething(&data)){
}
答案 1 :(得分: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按值传递所有内容。