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