Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - 7emiliosk8

#61
ah claro , me falto pedir memoria para los vectores que van dentro del vector ?
pero de todos modos si inicializara con el vector+1 con perro y depsues quisiera que el usuario ingresera una palabra da error... :/
#62
Hola en este codigo me da un error cuando le pido al usuario que ingrese una cadena y que modifique la que yo ya ingrese que es "perro", el problema esta en estas lineas

printf("Ingrese una palabra: ");
scanf("%s",(vector+1));


si no las pongo funciona bien, pero yo quiero que el usuario pueda modificar ese "perro" que yo di.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int i,j,a;
char **vector;

vector = (char**)malloc(2*sizeof(char*));

*(vector) = "hola";
*(vector + 1) = "perro";
printf("Ingrese una palabra: ");
scanf("%s",(vector+1));

puts("\nImprimiendo caracter a caracter:");
for(i=0;i<2;i++)
{
for(j=0; j<strlen(*(vector+i)) ; j++)
{
printf("%c",*(*(vector+i)+j));
}
puts("");
}

puts("\nImprimiendo completo:");
printf("%s\n",*vector);
printf("%s",*(vector+1));

free(vector);

return 0;
}

#63
Sos un master, muchas gracias por la explicacion, bless.
#64
Vaya XD que enredo, al menos como que lo entendi un poco, amigo, eso del ensamblador que genera el codigo me podrias explicar como usarlo o como tengo que buscar para poder aprender a utilizarlo y yo mismo ir practicando con otras formas de codigo.
aunque ya me quedo claro que no es recomendable utilizar este tipo de notacion jajaj, saludos!
#65
Cita de: ivancea96 en  8 Febrero 2017, 16:05 PM
El _++ incrementa en el mismo momento. La diferencia con respecto al ++_ es que el post-incremento retorna el valor antiguo, y el pre-incremento retorna el nuevo valor.

Amigo pero si tu dices que ambos tienen igual importancia, si yo tuviera dos de esos en una operacion, cual se resuelve primero ? es decir si tuviera

a = ++b * b++;

o en este ejemplo que esta mas elaborado, como se resolveria ? (segun el compilador b queda con un valor de 13.)

Citar
int main()
{
 int a=1;
 int b = a++ + ++a * a++;
 printf("%d",b);
}
#66
Cita de: ivancea96 en  7 Febrero 2017, 22:38 PM
En estos casos, ten en cuenta el orden en que se llaman los operadores: http://es.cppreference.com/w/cpp/language/operator_precedence

Primero, el post-incremento(_++). Luego, la desreferencia(*).

*envp++;
Eso es lo mismo que:
*(envp++);
El post-incremento retorna el valor que tiene actualmente, e incrementa el valor de la variable (el retorno sigue siendo el antiguo).
Así pues, poner ese * ahí no hace nada funcional.

Hola, gracias por responder, pero no se supone que el post incremento es lo ultimo que se hace ? o sea si tengo *envp++ el compilador no le da preferencia al "*"?  es decir accede al * pero como no hay nada que hacer en el, luego pasa al post incremento... o estoy equivocado ?
#67
Cita de: MAFUS en  7 Febrero 2017, 21:02 PM
Sí, así es.

Gracias master al fin pude entenderlo :D sos un crack!!!!, la ultima cosita y ahora si termino con esto :B

Me podrias decir que pasa en el compilador si tengo esto


while(*envp)
{
str = *envp;
envp++;
}


En esta parte envp++; si yo la pusiera como *envp++; tambien funciona.

si lo analiso en el primer caso envp++; asigna el valor sin problema, pero en el segundo *envp++; como es post incremento primero el compilador toma en cuenta *envp (no se si sean los terminos pero es como que el compilador accede a ese valor y no hace nada mas)  y luego como no hay nada que hacer con *envp , incrementa envp una vez, al final en el 2do caso como que el compilador hace un paso de mas ?

Saludos master.
#68
@MAFUS , una ultima cosa :D

en este codigo str = *envp++;

lo que primero esta haciendo es asignar el valor de *envp a str y luego incrementar envp una vez?
#69
Muchas gracias por toda la ayuda!!
#70
Cita de: MAFUS en  6 Febrero 2017, 15:17 PM
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!