Как вернуть указатель в качестве параметра функции
Я пытаюсь вернуть указатель данных из параметра функции:
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
Вы проходите по значению. dosomething
изменяет свою локальную копию data
- вызывающий не увидит этого.
Используйте это:
bool dosomething(char **data){
int datasize = 100;
*data = (char *)malloc(datasize);
return 1;
}
char *data = NULL;
if(dosomething(&data)){
}
Ответ 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 передает все по значению.