Autor
|
Tema: Array de punteros en lenguaje C. (Leído 6,894 veces)
|
DanielPy
Desconectado
Mensajes: 145
|
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.- #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
Mensajes: 1.639
|
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: #include <stdio.h> #include <string.h> int main(void) { char *frase[] = { "abeja", "Abeja" }; int i; if(strcmp(*frase , *(frase + 1)) > 0){ char *temp = frase[0]; frase[0] = frase[1]; frase[1] = temp; } for (i = 0; i < 2; i++) return 0; }
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
Mensajes: 145
|
Hola rir3760. 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
Mensajes: 145
|
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
Mensajes: 1.639
|
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
Mensajes: 145
|
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
Mensajes: 1.639
|
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: #include <stdio.h> #include <string.h> int main(void) { char *frase[] = { "abeja", "Abeja" }; int i; for (i = 0; i < 2; i++) printf("frase[%d]: %p --> %s\n", i , (void *) frase [i ], frase [i ]); if(strcmp(*frase , *(frase + 1)) > 0){ char *temp = frase[0]; frase[0] = frase[1]; frase[1] = temp; } for (i = 0; i < 2; i++) printf("frase[%d]: %p --> %s\n", i , (void *) frase [i ], frase [i ]); return 0; }
Su salida (en mi caso) es: 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
Mensajes: 145
|
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.- #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
|
|
|
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
Mensajes: 1.639
|
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): #include <stdio.h> #include <string.h> int main(void) { char *frase[] = { "abeja", "Abeja" }; int i; if(strcmp(*frase , *(frase + 1)) > 0){ char *temp = frase[0]; frase[0] = frase[1]; frase[1] = temp; } for (i = 0; i < 2; i++) return 0; }
Para que sea casi igual a tu ultimo programa solo hay que realizar algunos cambios: #include <stdio.h> #include <string.h> int main(void) { char *p = "abeja"; char *q = "Abeja"; char *temp = p; p = q; q = temp; } printf("%s %s\n", p , q ); /* Abeja abeja */ return 0; }
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
Mensajes: 145
|
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.-
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Array de punteros.
Programación C/C++
|
soyloqbuskas
|
3
|
9,719
|
30 Enero 2012, 20:28 pm
por soyloqbuskas
|
|
|
Duda Punteros Dobles/Array de punteros
Programación C/C++
|
MisterJava
|
2
|
5,169
|
30 Diciembre 2012, 20:19 pm
por MisterJava
|
|
|
Problema con array de punteros
Programación C/C++
|
NathanD
|
4
|
2,838
|
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
|
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
|
7 Enero 2015, 18:42 pm
por rir3760
|
|