Ir para conteúdo
Fórum Script Brasil

Mortanius

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Posts postados por Mortanius

  1. 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.

  2. 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);
    }

     

×
×
  • Criar Novo...