Pulse 0 Denunciar post Postado Maio 17, 2015 Tava tentando fazer uma função retornar um vetor (retornar, na verdade, o ponteiro para esse vetor). Consegui obter resultado para alguns dos elementos do vetor, mas há erro em outros. #include <stdio.h> int *array(); int main () { int a[4], *p, i; p = array(); a[0] = *p; a[1] = *(p+1); a[3] = *(p+2); a[4] = *(p+3); printf("%d %d %d %d", a[0], a[1], a[2], a[3]); } int *array () { int m[3] = {5, 2, 999, 90}, *k; k = m; return(k); } SAÍDA: O mesmo erro acontece (mas com números diferentes) quando printo diretamente os valores do ponteiro #include <stdio.h> int *array(); int main () { int a[4], *p, i; p = array(); for(i=0; i<4; i++) { printf("%d ", *(p+i)); } } int *array () { int m[3] = {5, 2, 999, 90}, *k; k = m; return(k); } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Maio 17, 2015 Preste atenção ali nos índices do array a. Onde foi parar o 2 no main? Dentro da função array vc reserva espaço p/ 3 elementos e declara 4. Compartilhar este post Link para o post Compartilhar em outros sites
Pulse 0 Denunciar post Postado Maio 20, 2015 Oi Isis. Estou com outra dúvida nesse processo, não seria necessário utilizar um ponteiro de ponteiro? k aponta pro vetor m, a função array retorna k, p recebe k e aponta pra k. Outra dúvida: seria possível retornar diretamente o endereço do vetor m e desse modo fazer apontar diretamente pro vetor m? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Maio 20, 2015 P/ você obter o endereço no qual a variável foi alocada, use o operador &. O problema é que você continuará retornando endereços de variáveis locais às funções. Esse é um ponto que merece uma leitura *bem* detalhada, porque modificadores como static mudam a estrutura do programa em execução (não que mudem o código, mas as variáveis tem seu "tempo de vida" alterado).Leia esses dois posts p/ você ter uma noção:http://stackoverflow.com/questions/8743411/return-address-of-local-variable-in-c http://stackoverflow.com/questions/453696/is-returning-a-pointer-to-a-static-local-variable-safe #include <stdio.h> int *array(); int main (void) { int a[4], *p, i; p = array(); a[0] = *p; a[1] = *(p+1); a[2] = *(p+2); a[3] = *(p+3); printf("%d %d %d %d", a[0], a[1], a[2], a[3]); return 0; } int *array () { int m[4] = {5, 2, 999, 90}, *k; k = m; return(k); } Executando esse código acima eu tenho como saída: 1 -1081654844 -1081654836 -1217630643 Mas se eu declarar m dentro da função array como static (static int m[4]={5,2,999,90}) eu consigo imprimir os valores de m, mesmo ele tendo sido alocado estaticamente dentro de uma função.Se eu não me engano (não tenho o padrão aqui pra conferir), a coisa funciona de forma diferente quando você tem alocação dinâmica. Com o código abaixo eu consigo acessar o array cuja alocação foi feita dentro de uma função (que normalmente acabaria 'destruindo' as variáveis ao término da execução do bloco). #include <stdio.h> #include <stdlib.h> int *array(); int main (void) { int a[4], *p, i; p = array(); a[0] = *p; a[1] = *(p+1); a[2] = *(p+2); a[3] = *(p+3); printf("%d %d %d %d", a[0], a[1], a[2], a[3]); free(p); return 0; } int *array () { int *m = malloc(sizeof(int)*4); *(m)= 5; *(m+1)= 2; *(m+2) = 999; *(m+3) = 90; return(m); } Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Maio 24, 2015 Seu vetor tem duração automática por causa da forma como foi criado. Por que não usa malloc? #include <stdlib.h> #include <stdio.h> int *make_array() { int *p = malloc(4 * sizeof *p); if (!p) { perror("malloc"); } *p = 5; p[1] = 2; p[2] = 999; p[3] = 90; return p; } int main(void) { int *a = make_array(); printf("%d %d %d %d", *a, a[1], a[2], a[3]); free(a); } Obs: aqui não retornamos o endereço do vetor, e sim o endereço do primeiro elemento do vetor. Compartilhar este post Link para o post Compartilhar em outros sites