Estou tentando escrever uma função que atribua um inteiro ou uma lista de inteiros à um ponteiro, dependendo de um parâmetro. Mas a atribuição não funciona dentro dela, apenas fora:
void retorna_algo(int size, int* destino){ if (size == 1){ *destino = 1; } else if (size == 3) { destino = (int[]){1, 2, 3}; } } int main(void) { int *ponteiro; ponteiro = malloc(sizeof(int)); retorna_algo(1, i); printf("%d\n", *i); // Escreve "1" - como esperado ponteiro = realloc(i, sizeof(int)*3); retorna_algo(3, i); printf("%d | %d | %d\n", i[0], i[1], i[2]); // Escreve "1 | 0 | 0", basicamente mantendo o valor zerado do malloc e realloc return 0; }
Usar destino = (int[]){1, 2, 3};
fora da função realmente atribui a array ao ponteiro, mas dentro dela nada… Como se o escopo estivesse afetando a atribuição. Eu acho que faz algum sentido, já que é uma atribuição do ponteiro da array ao endereço do literal declarado. E o endereço do literal é descartado quando a função é terminada.
Me leva a crer que o problema está na forma como a atribuição é feita (com cast para (int[])
), mas não consegui achar nenhum outro cast que desse certo.