elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Array de punteros en lenguaje C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Array de punteros en lenguaje C.  (Leído 6,894 veces)
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Array de punteros en lenguaje C.
« en: 19 Diciembre 2013, 23:53 pm »

Citar
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.
Aclaro que hace menos de una semana que llegué al capítulo “punteros” en el libro que estoy aprendiendo  C.-
Lo que debería hacer el programa es ordenar el arreglo de punteros para que se muestre Abeja – abeja y no abeja – Abeja, el gran problema que tengo es como declarar temp para que contenga la dirección de memoria de uno de los punteros.-
Espero se entienda de lo contrario por favor consúltenme necesito esto para poder seguir.-

Código:
#include <stdio.h>
#include <string.h>

int main(void){

char *frase[] = {"abeja", "Abeja"};
int i;
i = strcmp( *frase, *(frase+1));
if(i > 0){
temp = frase;
frase = frase+1;
frase+1 = temp;
}
for(i=0; i<2; i++){
printf("%s", *(frase+i));
}


return 0;
}

Saludos.
Daniel



En línea

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


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Array de punteros en lenguaje C.
« Respuesta #1 en: 20 Diciembre 2013, 02:59 am »

Deberias eliminar esto:
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.-
Ya que mientras no infrinjas las reglas de los foros no hay problema.

----

el gran problema que tengo es como declarar temp para que contenga la dirección de memoria de uno de los punteros
La variable temporal debe ser del mismo tipo que los elementos del array "frase": "char *".

Ademas en el intercambio debes aplicar indirección con el operador "*" o "[]". El programa con los cambios:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void)
  5. {
  6.   char *frase[] = {
  7.      "abeja",
  8.      "Abeja"
  9.   };
  10.   int i;
  11.  
  12.   if(strcmp(*frase, *(frase + 1)) > 0){
  13.      char *temp = frase[0];
  14.      frase[0] = frase[1];
  15.      frase[1] = temp;
  16.   }
  17.  
  18.   for (i = 0; i < 2; i++)
  19.      printf(" %s", frase[i]);
  20.   putchar('\n');
  21.  
  22.   return 0;
  23. }

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Array de punteros en lenguaje C.
« Respuesta #2 en: 20 Diciembre 2013, 03:19 am »

Hola rir3760.
Citar
Comparar dos líneas usando la función de la biblioteca estándar strcmp().
Si dos líneas están desacomodadas -- intercambiar (swap) los apuntadores (no el texto).
Discúlpame por la ignorancia, tú código cumple con el enunciado del libro?.
En cuanto a la aclaración de mi edad, obtengo mucha comprensión y no es lo mismo tener 20 que 61, son otras las posibilidades.-

Saludos.
Daniel


En línea

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

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Array de punteros en lenguaje C.
« Respuesta #3 en: 20 Diciembre 2013, 18:31 pm »

Hola a todos.-
Con esta imagen seguramente les quedara clara la idea.-



Saludos.
Daniel


En línea

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


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Array de punteros en lenguaje C.
« Respuesta #4 en: 21 Diciembre 2013, 00:50 am »

Discúlpame por la ignorancia, tú código cumple con el enunciado del libro?
Si. Un ejemplo similar se encuentra en el tema Consulta argumentos.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Array de punteros en lenguaje C.
« Respuesta #5 en: 21 Diciembre 2013, 01:36 am »

Hola rir3760.
Me parece que sigo sin explicarme lo suficiente, te dejo otra imagen que puede que quede más claro.-



En cuanto al enlace te soy sincero no lo probé porque es muy avanzado para mis conocimientos.-

Saludos.
Daniel

En línea

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


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Array de punteros en lenguaje C.
« Respuesta #6 en: 21 Diciembre 2013, 15:30 pm »

Me parece que estas confundiendo la dirección de un elemento con la dirección almacenada en el elemento. Las cadenas "abeja" y "Abeja" no pueden almacenarse en las direcciones 4c69c y 4c6a0 porque cada una consta (incluyendo el '\0') de seis caracteres.

Si modificamos el programa un poco:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void)
  5. {
  6.   char *frase[] = {
  7.      "abeja",
  8.      "Abeja"
  9.   };
  10.   int i;
  11.  
  12.   for (i = 0; i < 2; i++)
  13.      printf("frase[%d]: %p --> %s\n", i, (void *) frase[i], frase[i]);
  14.  
  15.   if(strcmp(*frase, *(frase + 1)) > 0){
  16.      char *temp = frase[0];
  17.      frase[0] = frase[1];
  18.      frase[1] = temp;
  19.   }
  20.   puts("----");
  21.  
  22.   for (i = 0; i < 2; i++)
  23.      printf("frase[%d]: %p --> %s\n", i, (void *) frase[i], frase[i]);
  24.  
  25.   return 0;
  26. }

Su salida (en mi caso) es:
Código:
frase[0]: 0x004090bd --> abeja
frase[1]: 0x004090b7 --> Abeja
----
frase[0]: 0x004090b7 --> Abeja
frase[1]: 0x004090bd --> abeja

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Array de punteros en lenguaje C.
« Respuesta #7 en: 24 Diciembre 2013, 00:19 am »

Hola a todos.
Por fin puedo demostrar con este programita lo que pretendía hacer, sólo que todavía no pude hacerlo con array de puntero a char, seguramente alguien me pondrá algún ejemplo.-

Código
  1. #include<stdio.h>
  2.  
  3. //funcion para cambiar las posiciones de memoria
  4. void cambiar_punteros(int **x, int **y) {
  5. void *t = *x;
  6. *x = *y;
  7. *y = t;
  8. }
  9.  
  10. int main(int argc,char *argv[]){
  11.  
  12. int a1 = 15, a2 = 29, *ptr1=&a1, *ptr2=&a2;
  13.  
  14. printf("\n\n int a1 = 15, a2 = 29, *ptr1=&a1, *ptr2=&a2;");
  15. printf("\n\n Posiciones y valores iniciales de *ptr1 --->  Valor = %d Direccion = %p",*ptr1, ptr1);
  16. printf("\n Posiciones y valores iniciales de *ptr2 --->  Valor = %d Direccion = %p\n",*ptr2, ptr2);
  17.  
  18. printf("\n\n Ahora quiero que p1 tenga la posicion de memoria de p2 y a la inversa.\n");
  19. cambiar_punteros(&ptr1,&ptr2);
  20. printf("\n\n Posiciones de memoria cambiados de *ptr1 --->  Valor = %d Direccion = %p",*ptr1, ptr1);
  21. printf("\n Posiciones de memoria cambiados de *ptr2 --->  Valor = %d Direccion = %p\n",*ptr2, ptr2);
  22.  
  23. return 0;
  24. }

       

Saludos.
Daniel

En línea

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


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Array de punteros en lenguaje C.
« Respuesta #8 en: 25 Diciembre 2013, 15:56 pm »

Por fin puedo demostrar con este programita lo que pretendía hacer, sólo que todavía no pude hacerlo con array de puntero a char
Sin animo de ofender pero en este tema desde mi primera respuesta tienes un ejemplo sobre como intercambiar el valor de dos punteros (por supuesto elementos de un array):
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void)
  5. {
  6.   char *frase[] = {
  7.      "abeja",
  8.      "Abeja"
  9.   };
  10.   int i;
  11.  
  12.   if(strcmp(*frase, *(frase + 1)) > 0){
  13.      char *temp = frase[0];
  14.      frase[0] = frase[1];
  15.      frase[1] = temp;
  16.   }
  17.  
  18.   for (i = 0; i < 2; i++)
  19.      printf(" %s", frase[i]);
  20.   putchar('\n');
  21.  
  22.   return 0;
  23. }

Para que sea casi igual a tu ultimo programa solo hay que realizar algunos cambios:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void)
  5. {
  6.   char *p = "abeja";
  7.   char *q = "Abeja";
  8.  
  9.   if(strcmp(p, q) > 0){
  10.      char *temp = p;
  11.      p = q;
  12.      q = temp;
  13.   }
  14.  
  15.   printf("%s %s\n", p, q); /* Abeja abeja */
  16.  
  17.   return 0;
  18. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Array de punteros en lenguaje C.
« Respuesta #9 en: 25 Diciembre 2013, 16:41 pm »

Hola rir3760.
Me culpo por no hacerme entender desde el principio, el último programa es el que necesitaba.-



Feliz navidad para todos y saludos.
Daniel

En línea

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.-
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Array de punteros.
Programación C/C++
soyloqbuskas 3 9,719 Último mensaje 30 Enero 2012, 20:28 pm
por soyloqbuskas
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 5,169 Último mensaje 30 Diciembre 2012, 20:19 pm
por MisterJava
Problema con array de punteros
Programación C/C++
NathanD 4 2,838 Último mensaje 26 Marzo 2013, 21:13 pm
por amchacon
Acceder a los caracteres de un array de punteros
Programación C/C++
David8 5 2,259 Último mensaje 6 Mayo 2014, 12:24 pm
por eferion
Ordenar alfabéticamente array de punteros a char (lenguaje C)
Programación C/C++
DanielPy 4 8,155 Último mensaje 7 Enero 2015, 18:42 pm
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines