Подтвердить что ты не робот

Как вернуть указатель в качестве параметра функции

Я пытаюсь вернуть указатель данных из параметра функции:

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)
}

Что я делаю неправильно?

4b9b3361

Ответ 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 передает все по значению.