Autor
|
Tema: Duda puntero en C (Leído 2,381 veces)
|
C--
Desconectado
Mensajes: 7
|
Hola a todos. Soy nuevo aquí y soy principiante en C, por lo que tengo la siguiente duda con este código: #include <stdio.h>
int main(){ int *a = (int*)malloc(sizeof(int)*3); int *b; *a = 2; *(a+1) = 4; *(a+2) = 6; b = a; *(b+1)=0; while(*(b++)); printf("%i, %i, %i\n",*a,*(a+1),*(a+2)); printf("%i, %i, %i\n",*b,*(b+1),*(b+2)); free(a); getchar(); return 0; } Por qué en la salida obtengo: 2, 0, 6 6, 1314869318, -1856398723 ¿Por qué con ese while pareciera que "desaparecieran" los valores de los punteros iniciales de b? *Nótese que es ";" al final del while y no un "{", y no hay ninguna línea de código dentro del while. Saludos y gracias
|
|
« Última modificación: 24 Septiembre 2012, 04:37 am por C-- »
|
En línea
|
|
|
|
diegoCmC
Desconectado
Mensajes: 177
|
Porque con a estas reservando el espacio de memoria, con b no, por lo que puedes estar accediendo a zonas donde no puedes escribir
|
|
|
En línea
|
a todas las que me abrieron su coraza traeles suerte ya no creo en el amor pero querria volver a verte
|
|
|
fary
|
Es por el while, si lo comentas te vas a ver que "b" apunta correctamente a "a". Qué quieres hacer realmente con ese while?
un saludo.
|
|
|
En línea
|
Un byte a la izquierda.
|
|
|
durasno
Desconectado
Mensajes: 373
|
¿Por qué con ese while pareciera que "desaparecieran" los valores de los punteros iniciales de b?
no es que "desaparecen", el problema es que estas modificando el puntero "b" al hacer b++ (revisa aritmetica de punteros) *Nótese que es ";" al final del while y no un "{", y no hay ninguna línea de código dentro del while. se pone el ";" ya que el while no tiene ningun bloque a ejecutar, todo se hace en la condicion... Con las llaves seria: while(*(b++)) { }
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Por qué en la salida obtengo: 2, 0, 6 6, 1314869318, -1856398723 ¿Por qué con ese while pareciera que "desaparecieran" los valores de los punteros iniciales de b? Previamente has igualado b a a+0, seguido de asignar b+1 a a+1, por lo que en el while, al incrementar b pasa a apuntar a a+2=6 y posteriormente b+1 y b+2 tomarían los valores de a+3 y a+4 ¡¡¡ y como no los tienes definidos se llena, de basura!!"!!!. Fíjate que en el siguiente código ya no habrá "basura":#include <stdio.h> int main() { int *a = (int*)malloc(sizeof(int)*3); int *b; *a = 2; *(a+1) = 4; *(a+2) = 6; *(a+3) = 8; *(a+4) = 9; b = a; *(b+1)=0;/* *(b+1)=*(a+1) = 0*/ while(*(b++));/* ==> b= b++=*(a+2) = 6*/ printf("%i, %i, %i\n",*a ,*(a +1),*(a +2)); printf("%i, %i, %i\n",*b ,*(b +1),*(b +2));/* *b=*(a+2)=6,*(b+1)=*(a+3)=8,*(b+2)=*(a+4)=9*/ return 0; }[code] Compáralo con el siguiente código: [code=c]#include <stdio.h> int main() { int *a = (int*)malloc(sizeof(int)*3); int *b; *a = 2; *(a+1) = 4; *(a+2) = 6; *(a+3) = 8; *(a+4) = 9; b = a+1; *(b+1)=0;/* *(b+1)=*(a+2) = 6*/ while(*(b++)) ;/* ==> b= b++=*(a+3) = 8*/ printf("%i, %i, %i\n",*a ,*(a +1),*(a +2)); printf("%i, %i, %i\n",*b ,*(b +1),*(b +2));/* *b=*(a+3)=8,*(b+1)=*(a+4)=9,*(b+2)=*(a+5)"BASURA"*/ return 0; }[code] Saludos
[/code][/code][/code]
|
|
« Última modificación: 24 Septiembre 2012, 23:08 pm por leosansan »
|
En línea
|
|
|
|
C--
Desconectado
Mensajes: 7
|
Me di cuenta de lo que estaba realmente sucediendo cuando dejé de ver el código y me fui a cenar Lo que pasa es que estaba interpretando una simple "lectura" de q en vez de una asignación a ésta (Duh!). Y al ver los ejemplos que dieron, lo corroboraron. Muchísimas gracias
|
|
« Última modificación: 25 Septiembre 2012, 02:00 am por C-- »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
duda doble puntero char a matriz de char
Programación C/C++
|
neo_from_cs_matrix
|
3
|
6,318
|
5 Septiembre 2011, 03:53 am
por rir3760
|
|
|
Texto siguiendo puntero en html (duda)
Desarrollo Web
|
IMPEESA
|
2
|
3,360
|
27 Septiembre 2011, 03:33 am
por IMPEESA
|
|
|
Duda con puntero a arreglo de caracteres
Programación C/C++
|
dato000
|
5
|
4,847
|
30 Noviembre 2012, 21:13 pm
por xiruko
|
|
|
Duda puntero a pila.
Programación General
|
lanun
|
0
|
1,685
|
27 Marzo 2014, 20:05 pm
por lanun
|
|
|
Duda con respecto a puntero a estructura
Programación C/C++
|
Curioso0078
|
2
|
1,866
|
9 Marzo 2017, 18:00 pm
por MAFUS
|
|