Aquí te dejo el código Daniel:
Código: Seleccionar todo
#include<stdio.h>
void cambiar_punteros(char **x, char **y) {
void *t = *x;
*x = *y;
*y = t;
}
int main(int argc,char *argv[]){
char *frase[2] = {"abeja", "Abeja"};
char *frase_abeja_ptr = frase[0];
char *frase_Abeja_ptr = frase[1];
printf("Posicion en Memoria y valores:\n\n De frase[0]: Posicion: %p Valor: %s \n De frase[1]: Posicion: %p Valor: %s\n\n", frase_abeja_ptr, frase_abeja_ptr, frase_Abeja_ptr, frase_Abeja_ptr);
cambiar_punteros(&frase_abeja_ptr, &frase_Abeja_ptr);
printf("Posicion en Memoria y valores:\n\n De frase[0]: Posicion: %p Valor: %s \n De frase[1]: Posicion: %p Valor: %s\n\n", frase_abeja_ptr, frase_abeja_ptr, frase_Abeja_ptr, frase_Abeja_ptr);
getch();
return 0;
}
¿Esto es lo que tu querías? Si es que sí, tienes un problema de concepto en cuanto a "Posiciones de Memoria y punteros".
En este codigo no se están trabajando bien los punteros, ni las referencias al propio dato, y a la dirección de memoria donde se está almacenando ese dato.
Porque realmente no estás intercambiando las posiciones de memoria reales. Yo te dejo
"tu" solución pero tienes que saber que no estás haciendo realmente lo que quieres. Si tienes alguna pregunta o alguna duda, te seguiré respondiendo.
No te limites a coger códigos de internet e ir probándoles e intercambiando cosas para ver si funcionan o no. Así jamás aprenderas, coge unos buenos apuntes y estudia desde el principio. El tema de punteros sobre todo ya que es algo más complicado pero a la vez muy utilizado y básico en C.
Saludos!