Hago esta aclaración porque en muchos casos suponen que tengo 15 o 20 años(es lo lógico) y en realidad tengo 61, como comprenderán no voy a la facultad y la gente que conozco no tiene la más mínima idea lo que es la computadora y menos programar.-
Hola a todos.
Les consulto porque hace una semana que estoy estudiando el capitulo 8 apuntadores y se pide el siguiente enunciado (la imagen es mía no del manual).-

Imagen


El caso es que no sé como guardar en un apuntador temporal la dirección de otro apuntador.-
Bueno eso es todo si me ayudan con esto el resto del código puedo completarlo sólo.-

Saludos.
Daniel
Imagen
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Pino1952 escribió:
Hago esta aclaración porque en muchos casos suponen que tengo 15 o 20 años(es lo lógico) y en realidad tengo 61, como comprenderán no voy a la facultad y la gente que conozco no tiene la más mínima idea lo que es la computadora y menos programar.-
Hola a todos.
Les consulto porque hace una semana que estoy estudiando el capitulo 8 apuntadores y se pide el siguiente enunciado (la imagen es mía no del manual).-

Imagen


El caso es que no sé como guardar en un apuntador temporal la dirección de otro apuntador.-
Bueno eso es todo si me ayudan con esto el resto del código puedo completarlo sólo.-

Saludos.
Daniel
Imagen
Mira este pequeño código y a ver si lo entiendes o si tienes preguntas.

Código: Seleccionar todo

int main()
{
    int A;
    int *p; // p es un puntero a entero
    int **pp; // pp en un puntero a puntero a entero
 
    A=10;
    p=&A; // p apunta a A
    pp=&p; // pp apunta a p

    getch();
}
Saludos.
Hola OK3NETu.
Decime si entendí bien lo de puntero a puntero.-
Ahora quiero que me digas si lo otro se puede hacer, lo que pretendo es que puntero[0] apunte a 01003 y puntero[1] a 01002, no cambiar el contenido de los apuntadores si no intercambiar a donde apuntan.-

Imagen


Saludos.
Daniel
Imagen
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Hola a todos.-
OK3NETu, esperando tu respuesta en parte pude lograr lo que pretendía, digo en parte porque pude hacerlo con enteros pero no con array de punteros a char.-

Saludos.
Daniel
Imagen
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Claro, hay un problema. Con enteros la referencia a memoria por cada variable es de, digamoslo así, "un registro". Sin embargo, en los arrays se reservarvan varios registros en memoria. Tendrías un problema de integridad referencial. Sin ver el código es más difícil ayudar.

Saludos!
Hola OK3NETu.
Te dejo lo que tengo hasta el momento, estoy intentando lo mismo con array de punteros, necesito de tu guía.-
#include<stdio.h>

//funcion para cambiar las posiciones de memoria
void cambiar_punteros(int **x, int **y) {
	void *t = *x;
	*x = *y;
	*y = t;
}

int main(int argc,char *argv[]){

	int a1 = 15, a2 = 29, *ptr1=&a1, *ptr2=&a2;
	
	printf("\n\n int a1 = 15, a2 = 29, *ptr1=&a1, *ptr2=&a2;");
	printf("\n\n Posiciones y valores iniciales de *ptr1 --->  Valor = %d Direccion = %p",*ptr1, ptr1);
	printf("\n Posiciones y valores iniciales de *ptr2 --->  Valor = %d Direccion = %p\n",*ptr2, ptr2);

	printf("\n\n Ahora quiero que p1 tenga la posicion de memoria de p2 y a la inversa.\n");
	cambiar_punteros(&ptr1,&ptr2);
	printf("\n\n Posiciones de memoria cambiados de *ptr1 --->  Valor = %d Direccion = %p",*ptr1, ptr1);
	printf("\n Posiciones de memoria cambiados de *ptr2 --->  Valor = %d Direccion = %p\n",*ptr2, ptr2);

	return 0;	
}
Saludos.
Daniel
Imagen
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Vale, veo que intercambias las posiciones de memoria, pero que también se intercambian los valores. ¿Lo que tu quieres hacer es que únicamente se intercambien las posiciones de memoria y no los valores?
OK3NETu escribió:Vale, veo que intercambias las posiciones de memoria, pero que también se intercambian los valores. ¿Lo que tu quieres hacer es que únicamente se intercambien las posiciones de memoria y no los valores?
Hola OK3NETu.
Feliz navidad,no,no lo que quiero es hacer exactamente lo mismo pero con array de punteros a char, desconozco la sintaxis.-

Saludos.
Daniel
Imagen
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Ya entiendo Daniel. Mira te voy a dejar este artículo que he encontrado googleando a ver si te aclaro el tema de la sintaxis y puedes resolver el problema tú mismo, si no te echaré una mano.

Echa un ojo a esto: [Enlace externo eliminado para invitados]

Sobre todo el apartado de resumen que es donde hacen más hincapié en la sintaxis, que es tu principal duda por lo que veo: [Enlace externo eliminado para invitados]

Espero que sea de ayuda. Espero tu respuesta.

Un Saludo!
Hola OK3NETu.
Gracia por todo el interés en ayudarme.-
El programita que dejo a continuación hace lo que deseo, sólo que quiero hacerlo con un solo array de punteros.-
Ejemplo:

Código: Seleccionar todo

char frase[] = {"abeja", "Abeja"};

Código: Seleccionar todo

#include <stdio.h>
#include <string.h>
     
int main(void){
	char *ptra = "abeja";
	char *ptrA = "Abeja";

	printf("\n\n %p -- %p", ptra, ptrA);
	
	if(strcmp(ptra, ptrA) > 0){
		char *temp = ptra;
		ptra = ptrA;
		ptrA = temp;
	}
	
	printf("\n\n %p -- %p", ptra, ptrA);
	printf("\n\n %s -- %s", ptra, ptrA);
	
	return 0;
}

por favor dame una manito que estoy a punto de lograrlo.-

Saludos.
Daniel
Imagen
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
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!
Fíjate en este otro código como accedemos a las direcciones de memoria para imprimirlas por pantalla con el "&":

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 sí son direcciones de memoria reales. Al ver el resultado final de la ejecución del programa, podrás observar que el las direcciones de memoria de frase[0] y frase[1] no se han intercambiado, pero sin embargo si han intercambiado su valor entre "abeja" y "Abeja". El manejo de la memoria en C es algo complejo, te dejo unos apuntes:

[Enlace externo eliminado para invitados]

Espero que sigas aprendiendo, creo que tu duda ha quedado resuelta.

Saludos!
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.
¿Que sos mago?
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Pino1952 escribió:
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.
¿Que sos mago?
jajaja. No pero es lo que hacemos todos al empezar en la programación. Pero después de un tiempo te das cuenta que la manera real de aprender es el estudio con apuntes, libros e ir probando y codeando tú mismo.

¿Todo claro entonces? ¿ Te valieron y entendiste mis ejemplos ?

Saludos.
Hola OK3NETu.
Gracias amigo todo quedo claro, te voy a tener muy en cuenta y debo aclararte que leo muchísimo, tal vez no asimilo de la misma manera que cuando tenía 20 pero deberé estudiar el doble.-

Un abrazo.
Daniel
Imagen
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder

Volver a “C/C++”