Autor
|
Tema: otra manera de escribir *envp++ (Leído 7,704 veces)
|
7emiliosk8
Desconectado
Mensajes: 73
|
C, hola, de que otra manera puedo escribir esa notacion ? no entiendo ya que se supone que al hacer *envp++ es como si estumiera incrementando adentro del printf la variable :s por que cuando uno tiene por ejemplo int i, y luego hace i++ es lo mismo que tener i = i+1;, pero yo probe poniendo *envp = *envp + 1 y no funciona, tampoco funciona poniendo *envp = *(envp+1) :s
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
... *var++ ...
Es lo mismo que hacer ... *var ... ++var;
|
|
|
En línea
|
|
|
|
7emiliosk8
Desconectado
Mensajes: 73
|
... *var++ ...
Es lo mismo que hacer ... *var ... ++var;
Gracias, pero tengo una duda, el codigo era: printf("%s\n",*envp++); y tu me dices que es lo mismo que poner ... *var ... ++var; pero si lo pongo asi tambien funciona :S ... *var ... ++*var; porque ocurre eso ?
|
|
« Última modificación: 5 Febrero 2017, 20:21 pm por 7emiliosk8 »
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Si miras la tabla de prioridad de operadores de C verás que * y ++ tienen la misma prioridad y se evalúan de derecha a izquierda. Además de esto hay que recordar que el postincremento aumenta la variable después de que esta haya devuelto su valor.
Juntando todo esto tenemos que: 1. *envp++ -> Una expresión para operar 2. envp++ -> Evaluados los operadores que afectan a la variable se toma es postincremento. 3. Como envp++ es un postincremento primero se tomará el valor. 4. *envp -> Se toma el valor de la variable (una dirección de memoria) y se ejecuta el operador *, consiguiendo el valor que guarda dicha dirección. 5. envp++ -> Se termina de ejecutar el operador de postincremento sobre la variable y la hace apuntar a la siguiente posición de memoria.
|
|
|
En línea
|
|
|
|
7emiliosk8
Desconectado
Mensajes: 73
|
Si miras la tabla de prioridad de operadores de C verás que * y ++ tienen la misma prioridad y se evalúan de derecha a izquierda. Además de esto hay que recordar que el postincremento aumenta la variable después de que esta haya devuelto su valor.
Juntando todo esto tenemos que: 1. *envp++ -> Una expresión para operar 2. envp++ -> Evaluados los operadores que afectan a la variable se toma es postincremento. 3. Como envp++ es un postincremento primero se tomará el valor. 4. *envp -> Se toma el valor de la variable (una dirección de memoria) y se ejecuta el operador *, consiguiendo el valor que guarda dicha dirección. 5. envp++ -> Se termina de ejecutar el operador de postincremento sobre la variable y la hace apuntar a la siguiente posición de memoria.
Gracias por ser el unico en responder amigo, para ver si entendi, todos esos pasos ocurren por el hecho de estar dentro del printf ? , es decir si no tuviese ese printf y declarase en el main char *hola++, ahi simplemente incrementa de una vez la variable hola porque no hay nada mas que hacer ? y otra cosa, si yo hubiese querido que se incrementase inmediatamente antes de hacer el printf ? como hubiese sido esa notacion ? en vez de poner esto printf("%s",*envp++); como seria?
|
|
« Última modificación: 6 Febrero 2017, 03:43 am por 7emiliosk8 »
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
En referente a tu primera pregunta: así es. De hecho la instrucción seguiría todos los pasos que te he dicho, pero al no haber nadie recogiendo el valor de ésta, el efecto final sería solo el incremento.
En referente a tu segunda pregunta: La instrucción sería ... *++envp .... De nuevo los operadores se evalúan de derecha a izquierda, por lo tanto ++ tiene prioridad sobre *. Como ++ en este caso es preincremento se ejecuta enseguida y después entrega el valor, que será pasado a * para conseguir el valor de la nueva dirección de memoria.
|
|
|
En línea
|
|
|
|
7emiliosk8
Desconectado
Mensajes: 73
|
En referente a tu segunda pregunta: La instrucción sería ... *++envp .... De nuevo los operadores se evalúan de derecha a izquierda, por lo tanto ++ tiene prioridad sobre *. Como ++ en este caso es preincremento se ejecuta enseguida y después entrega el valor, que será pasado a * para conseguir el valor de la nueva dirección de memoria.
Buenos dias, gracias por responder de nuevo, pero una cosa que no logro entender es a que te refieres con de derecha a izq, ya que en ambos casos *envp++ *++envp la operacion ++ esta por delante del * o sea en los dos casos tiene prioridad :s por que en la primera es entonces post incremento y en la otra pre ? Ojala me entiendas, saludos!
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Sigue este enlace, contiene la prioridad y precedencia de los operadores. http://maxus.fis.usal.es/fichas_c.web/03xx_pags/0303.htmlDe izquierda a derecha quiere decir que : A op1 B op2 C Si op1 y op2 tienen misma prioridad primero se operará op1 y después op2. De derecha a izquierda quiere decir que A op1 B op2 C Si op1 y op2 tienen misma prioridad primero se operará op2 y después op1. Sobre tu última pregunta: Sí primero se ejecuta el ++ pero el que esté en preincremento o postincremento produce efectos en tiempos diferentes.
|
|
|
En línea
|
|
|
|
7emiliosk8
Desconectado
Mensajes: 73
|
Muchas gracias por toda la ayuda!!
|
|
« Última modificación: 7 Febrero 2017, 00:58 am por 7emiliosk8 »
|
En línea
|
|
|
|
7emiliosk8
Desconectado
Mensajes: 73
|
@MAFUS , una ultima cosa en este codigo str = *envp++;lo que primero esta haciendo es asignar el valor de *envp a str y luego incrementar envp una vez?
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Hay alguna otra manera de saltar a una linea nueva?
PHP
|
extreme69
|
1
|
2,271
|
5 Marzo 2012, 13:51 pm
por WHK
|
|
|
Escribir META DESCRIPCION de un sitio de manera cómoda, segun contenido.
Desarrollo Web
|
Skeletron
|
7
|
3,882
|
7 Junio 2013, 00:19 am
por Skeletron
|
|
|
Otra manera de ver los navegadores de internet
Noticias
|
wolfbcn
|
1
|
2,926
|
29 Agosto 2013, 09:28 am
por do-while
|
|
|
Hay manera de encender el portátil de otra manera?
« 1 2 3 »
Windows
|
BlackMorror5
|
20
|
10,608
|
13 Abril 2022, 22:33 pm
por stack
|
|
|
Usar switch o otra manera para poner en gotoXY textos
Programación C/C++
|
Meta
|
0
|
523
|
29 Octubre 2024, 07:01 am
por Meta
|
|