vale, reservas una dirección de memoria. Te reserva una direccion de memoria de 1 byte (estamos hablando de los char), pero supongamos que en la siguiente dirección, hay información valiosa, esa información te la cargas, x eso de utilizar el malloc, xq si la cosa va mal, t devuelve un errorEs tal y como lo dije antes, estas confundido y por eso al intentar reformular seguis diciendo algo incorrecto.
Vaya, creo q ahora m exprese mejor :unsure:
vaya Eternal Idol, sabes mas que mi profesora de programación (no es que lo diga en tono irónico, es que lo digo en serio)
Tendré que corregirme a mi mismo, que dije que hacer una declaración como char *variable, y luego hacer gets(variable) estaba mal, pero veo que no.
corrigeme si m ekivoco, pero t declaras un puntero (var), y luego dices, que el contenido de ese puntero (*var) cuya dirección es (var) sea 'A', es como si haces esto:
char *var, var2;
var2 = 'A';
*var=var2; //*var no es el contenido de "var"?
yo pensaba que eso estaba bien, pero parece que tengo un error de conceptos un poco grande.
char *var;Hay una cosilla más para agregar.
Hay una cosilla más para agregar.Efectivamente, ULONG_PTR para los amigos B)
El tamaño de "puntero a char" llamado "var" no es 1 bytes, es decir, no tiene el tamaño de un "char" sino de un "puntero a char" que segun el sistema operativo, puede ser 16 (DOS),32bits = 4 bytes(Windows XP),64 bits (Vista version 64).
buf, ahora si que estoy perdido.... con lo feliz que era en mi ignorancia :wacko: , ahora estoy un poco confuso, a ver, los procesadores de 32 bits, por ej, son para procesar instruccines de 32 bits (instrucciones como if, for, etc), mientras que las variables se alojan en memoria (RAM, por lo general). Con los datos y las instrucciones, el procesador hace su trabajo, pero no entiendo que tiene que ver que el SO utilice software de 32 o 64 bits, para que reserve 64 bits para un caracter en el vista de 64 bits, por ejemplo :wacko:Citarchar *var;Hay una cosilla más para agregar.
El tamaño de "puntero a char" llamado "var" no es 1 bytes, es decir, no tiene el tamaño de un "char" sino de un "puntero a char" que segun el sistema operativo, puede ser 16 (DOS),32bits = 4 bytes(Windows XP),64 bits (Vista version 64).
buf, ahora si que estoy perdido.... con lo feliz que era en mi ignorancia :wacko: , ahora estoy un poco confuso, a ver, los procesadores de 32 bits, por ej, son para procesar instruccines de 32 bits (instrucciones como if, for, etc), mientras que las variables se alojan en memoria (RAM, por lo general). Con los datos y las instrucciones, el procesador hace su trabajo, pero no entiendo que tiene que ver que el SO utilice software de 32 o 64 bits, para que reserve 64 bits para un caracter en el vista de 64 bits, por ejemplo :wacko:Otra vez, es que no se reserva memoria dinamica sino que una variable local esta en la pila y para poder APUNTAR a una direccion se necesita un determinado tamaño para poder direccionar a la misma:
los procesadores de 32 bits, por ej, son para procesar instruccines de 32 bits (instrucciones como if, for, etc),Las instrucciones if,while,for,etc... son instrucciones de un lenguaje de alto nivel, como C++ no del procesador.
mientras que las variables se alojan en memoria (RAM, por lo general)Si, pero para realizar la mayoria de instrucciones, por ejemplo Suma,Resta,Division,etc... el procesador utiliza los llamados Registros, que son una especie de memoria interna del procesador que usa para casi todas las operaciones.
ero no entiendo que tiene que ver que el SO utilice software de 32 o 64 bitsTene en cuenta que una aplicacion que utilice instucciones de 64bits no pude correr sobre un procesador de 32bit. Al reves generalmente se puede.
char a='A';¿Que plataformas conoces donde eso no ocupe un solo byte?
Dependiendo de la máquina y del modelo de memoria que se utilice tenes las siguientes posibilidades:
La verdad en todas las plataformas que trabajé vi eso, fijate:
es por eso que en muchos manuales te dicen que es recomendable usar solo variables int ya que de todas formas siempre utilizas 32 bits...
PD: Y en el mejor de los casos, con instrucciones como:
mov byte ptr [edx], 41
el registro edx termina conteniendo: 0x00000041
Ademas si lo que decis fuera cierto cadena de caracteres ocuparia 4 * caracter y eso no es asi ...
QUOTE (Karman @ Octubre 26, 2007 03:09 pm)
es por eso que en muchos manuales te dicen que es recomendable usar solo variables int ya que de todas formas siempre utilizas 32 bits...
Me parece que estas confundiendo con el tema de "alineamiento" a 32 bits.
no... no dije que si tuviera una cadena cada elemento ocuparía un byte... ya que las cadenas se agrupan en bytes consecutivos y el procesador mediante el índice (byte) puede ir pasando de caracter a caracter....
no... lo que yo digo es para definir variables comunes, como contadores, etc... no para el trabajo con strings... y recomendaban justamente eso por lo que te mostré en el código en assembler...
No hice trampa... "Main() must return int"...Estaba en cursiva ;) Y al fin y al cabo era engañoso, usaba el registro eax por ser int el tipo de retorno (que forzabas mediante casting).