Mortanius Postado Julho 11, 2016 Denunciar Share Postado Julho 11, 2016 (editado) Tive a ideia de alterar os endereços de dois ponteiros (um pelo outro) invés de trocar os valores armazenados por eles. A intenção seria fazer isso com vetores (arrays), já que seria mais viável, aí veio o problema: Funcionou com ponteiros mas não funcionou com os vetores. Podem me ajudar a entender por quê? Os códigos: Ponteiros: #include<stdio.h> #include<stdlib.h> void invert_ad (int** a, int** b) { int* temp; temp = *a; *a = *b; *b = temp; } main() { int a = 10; int* pointer_a = &a; int** ppointer_a = &pointer_a; int b = 20; int* pointer_b = &b; int** ppointer_b = &pointer_b; printf("pointer_a Adress: %p\n", pointer_a); printf("pointer_b adress: %p\n", pointer_b); invert_ad (ppointer_a, ppointer_b); printf("pointer_a adress: %p\n", pointer_a); printf("pointer_b adress: %p\n", pointer_b); } Arrays: #include<stdio.h> #include<stdlib.h> void invert_ad (int** a, int** b) { int* temp; temp = *a; *a = *b; *b = temp; } main() { int array_a[5] = {0, 1, 2, 3, 4}; int array_b[5] = {5, 6, 7, 8, 9}; int** parray_a = &array_a; int** parray_b = &array_b; printf("array_a adress %p\n", array_a); printf("array_b adress %p\n", array_b); invert_ad (parray_a, parray_b); printf("array_a adress %p\n", array_a); printf("array_b adress %p\n", array_b); } Editado Julho 11, 2016 por Mortanius Atualização da dúvida Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Julho 11, 2016 Denunciar Share Postado Julho 11, 2016 6 horas atrás, Mortanius disse: Funcionou com ponteiros mas não funcionou com os vetores. Fácil... arrays são um tipo de ponteiros constantes, na realidade não são nem considerados ponteiros, não foram pensados para ser 'trocados'. você pode ler esse tópico(em inglês) para obter uma serie de idéias de como solucionar o problema: http://stackoverflow.com/questions/3393518/swap-arrays-by-using-pointers-in-c Sorte. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mortanius Postado Julho 11, 2016 Autor Denunciar Share Postado Julho 11, 2016 6 horas atrás, vangodp disse: Fácil... arrays são um tipo de ponteiros constantes, na realidade não são nem considerados ponteiros, não foram pensados para ser 'trocados'. você pode ler esse tópico(em inglês) para obter uma serie de idéias de como solucionar o problema: http://stackoverflow.com/questions/3393518/swap-arrays-by-using-pointers-in-c Sorte. Valeu por responder, vangodp. Tinha tirado essa dúvida ainda essa madrugada noutro fórum e, de fato: estava confundindo arranjos com vetores, achando que se comportavam da mesma forma, mas o arranjo tem tamanho fixo, e o mesmo vale pro endereço, nem como ponteiro pude usar. Valeu. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Julho 11, 2016 Denunciar Share Postado Julho 11, 2016 11 minutos atrás, Mortanius disse: Valeu por responder, vangodp. Tinha tirado essa dúvida ainda essa madrugada noutro fórum e, de fato: estava confundindo arranjos com vetores, achando que se comportavam da mesma forma, mas o arranjo tem tamanho fixo, e o mesmo vale pro endereço, nem como ponteiro pude usar. Valeu. Com memória dinâmica sim você pode faze-lo, todo o problema está a causa da pilha, o ultimo prato a ser inserido será o primeiro em ser retirado, então realmente não podemos manipular essas direções, porem se usar malloc para reserva de memória sim você será possível fazer o que quer. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Mortanius
Tive a ideia de alterar os endereços de dois ponteiros (um pelo outro) invés de trocar os valores armazenados por eles.
A intenção seria fazer isso com vetores (arrays), já que seria mais viável, aí veio o problema:
Funcionou com ponteiros mas não funcionou com os vetores.
Podem me ajudar a entender por quê?
Os códigos:
Ponteiros:
Arrays:
Atualização da dúvida
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.