Autor
|
Tema: Incremento de punteros (Leído 5,651 veces)
|
NathanD
Desconectado
Mensajes: 48
|
Buenas, mi problema esta vez es el siguiente. En realidad me gustaría que me explicarais el porqué de este resultado de este código. El código: #include <stdio.h> #define MAXLINE 60 int main() { char *ptr; ptr = (char*) malloc(MAXLINE * sizeof(char) ); printf("Introduce una frase: "); fgets(ptr , MAXLINE +1, stdin ); printf("\n%p = %c", ptr ,*ptr ); ptr++; printf("\n%p = %c", ptr , *ptr ); printf("\n\n%p %p", ptr , ptr ++); return 0; }
El resultado: Mi duda es, ¿por qué hace el incremento "al revés"? Después de haber incrementado el puntero en uno para que apunte al segundo carácter (ahí en cambio no hay problema), luego en el printf no es la misma dirección de memoria. Saludos y gracias de antemano.
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Estas seguro que esa es la salida de ese codigo? Recordar que haces un pos incremento.
|
|
|
En línea
|
|
|
|
NathanD
Desconectado
Mensajes: 48
|
Estas seguro que esa es la salida de ese codigo? Recordar que haces un pos incremento.
Sí, lo he probado con más de un compilador.
|
|
|
En línea
|
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Sí, lo he probado con más de un compilador.
Yo no estoy seguro lo que dice naderST, pero aun si fuera cierto no tiene sentido #include <stdio.h> #define MAXLINE 60 int main() { char *ptr; ptr = (char*) malloc(MAXLINE * sizeof(char) ); printf("Introduce una frase: "); fgets(ptr, MAXLINE+1, stdin); printf("\n%p = %c", ptr,*ptr); ptr++; printf("\n%p = %c", ptr, *ptr); printf("\n\n%p %p", ptr, ptr++); getchar(); return 0; } Si aun los argumentos se evaluaran de derecha a izquierda en la linea del tercer printf ptr deberia contener la dirección 00512421, además he notado que en el tercer printf el valor de ptr vale 00512422, valor inicial 00512420 y solamente se hace un incremento. ¿Que compilador utilizas? Agregado: He compilado con VC++ y Dev-Cpp(MinGW32): Facil como pasarle una mirada al codigo. He corregido, el segundo argumento pasado a la tercera llamada a printf deberia contener 00512421.
|
|
« Última modificación: 29 Marzo 2013, 18:54 pm por x64Core »
|
En línea
|
|
|
|
naderST
|
Compilado con MinGW: EDIT: Yo no estoy seguro lo que dice naderST, pero aun si fuera cierto no tiene sentido
No me creas a mí, revisa el enlace que coloqué de stack overflow y si no me equivoco es algo que está contemplado en el estándar pero no está especificado. Si te fijas bien, en el tercer printf (cuarto en realidad) antes de ser llamado ptr vale 00512421, al evaluarse de derecha a izquierda se hace un pos-incremento quedando la llamada de la siguiente manera: printf("\n\n%p %p", 00512422, 00512421);
|
|
« Última modificación: 29 Marzo 2013, 19:18 pm por naderST »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Buenas, mi problema esta vez es el siguiente.
En realidad me gustaría que me explicarais el porqué de este resultado de este código. El primer cambio a realizar es: antes de utilizar la función malloc debes tener acceso a su prototipo, eso lo consigues incluyendo el encabezado <stdlib.h>. Yo no estoy seguro lo que dice naderST naderST esta en lo correcto: el orden en que se evalúan los operandos de una expresión y cuando exactamente aplican los efectos laterales no lo define el lenguaje. Si modificamos el programa ligeramente (inclusión de <stdlib.h> y unos cuantos avances de linea) algunas salidas mas son: Con Lcc-win32: Introduce una frase: hola, mundo 0x00144610 = h 0x00144611 = o 0x00144612 0x00144611 Con gcc 4.5.3 (CygMing): Introduce una frase: hola, mundo 0x20010228 = h 0x20010229 = o 0x2001022a 0x20010229 Con Visual C++ 2008 Express: Introduce una frase: hola, mundo 00373E30 = h 00373E31 = o 00373E31 00373E31 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
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Ya veo, yo realmente no uso esos compialdores y creo que jamas cambiaria a esos apestosos compiladores Tampoco me saldria del estandar
|
|
|
En línea
|
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
se puede incremento en id?
Desarrollo Web
|
basickdagger
|
3
|
2,900
|
15 Junio 2012, 13:43 pm
por basickdagger
|
|
|
Duda Punteros Dobles/Array de punteros
Programación C/C++
|
MisterJava
|
2
|
5,206
|
30 Diciembre 2012, 20:19 pm
por MisterJava
|
|
|
Incremento del 28 % en las ventas de ordenadores Mac
Noticias
|
wolfbcn
|
0
|
1,260
|
11 Enero 2014, 01:03 am
por wolfbcn
|
|
|
Problema y duda con incremento de punteros
Programación C/C++
|
NicolasPileci
|
2
|
1,913
|
6 Septiembre 2016, 20:34 pm
por NicolasPileci
|
|
|
1, acciones, incremento VS 0, incremento, acciones.
Programación General
|
Tachikomaia
|
2
|
2,822
|
3 Febrero 2024, 14:51 pm
por Parado_larga_duracion_ESP
|
|