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 - Bob1098

#21
Cita de: furciorifa en  7 Septiembre 2015, 00:00 AM
Trata de hacer un malloc(sizeof(int)*CANTIDAD DE ELEMENTOS DE ARRAY);
para que sea más portable, me refiero a que no en todas las computadoras ni todos los procesadores manejan los enteros del mismo tamaño de bytes, para que tengas cuidado

Si, en esos aspectos me considero "responsable" siempre que haya que especificar el tamaño en bytes de algún tipo de variable utilizo el operador sizeof por si acaso.
#22
Vale, gracias por resolver mis dudas. Un saludo!
#23
Lo cual significa que si no conozco el tamaño del array que voy a usar debería usar un puntero dinámico, no?
#24
Estoy revisando el tema de los punteros y la memoria dinámica en C, y me han surgido algunas dudas. Si declaro un array de int estático de digamos, 100 elementos, y no le doy ningún valor, ese array estará ocupando 400 bytes en la memoria según mi código:

Código (cpp) [Seleccionar]

#include <stdio.h>

int main(int argc, char *argv[])
{
int array[100];

printf("%i", sizeof(array));
getch();
return 0;
}


Es decir independientemente de que el array estático este lleno o no, siempre va ocupar 400 bytes. Ahora bien, supongo que para eso existe la memoria dinámica. Si quiere tener un array que puede tener como máximo 100 elementos, lo puedo hacer con este código:

Código (cpp) [Seleccionar]

       int *array = (int*)malloc(400);


Sin embargo, si quiero averiguar su tamaño en memoria siempre me va a dar 4 bytes, ya que un puntero de tipo int siempre va a ocupar 4 bytes. Entonces, ¿cómo sé que esos 400 bytes solo están reservados y no se están ocupando?

Agradecería una respuesta clara y bien explicada, gracias.
#25
Acabo de comprenderlo, impresionante optimización =D
#26
Cita de: do-while en 17 Septiembre 2014, 20:54 PM
¡Buenas!

Esta función es muy sencilla también:

int longitud(char *s)
{
    if(!(*s))
        return 0;

    return 1 + longitud(s + 1);
}


¡Saludos!

PD: o con un cuerpo de una sola línea: XD

int longitud(char *s)
{
    return (*s) ? 1 + longitud(s + 1) : 0;
}


Me puse a revisar antiguos mensajes y me di cuenta de que no había leído tu respuesta (una lástima por que me parece la función más sencilla y efectiva de todas). Dicho esto, no comprendo muy bien como funciona, solo se que utiliza la recursividad y el if "simplificado". Podrías explicarme un poquito que es lo que hace exactamente?
#27
Programación C/C++ / Re: Tipo de Dato Unsigned.
4 Septiembre 2015, 22:36 PM
Cita de: ivancea96 en  4 Septiembre 2015, 17:42 PM
Incluso en ese ejemplo, que sea unsigned te quita muchas posibilidades. Por ejemplo, si quieres saber la diferencia de niveles entre dos personajes, harías:
diferencia = abs(nivel1 - nivel2);
Claro que si haces eso con unsigned, te puede dar valores erroneos si nivel2>nivel1.

Habría que buscar otro modo, como:
diferencia = max(nivel1,nivel2) - min(nivel1,nivel2);

Que ya es más rodeo.

Muy cierto, no me lo había planteado de esa manera...
#28
Programación C/C++ / Re: Tipo de Dato Unsigned.
4 Septiembre 2015, 15:10 PM
Claro, como bien dice ivancea solo debes utilizar unsigned en el caso de que utilices números enteros que solo puedan ser positivos (números naturales). Un ejemplo podría ser los niveles de un personaje de videojuegos, pueden ir del 1 al 100 pero no puedes ser nivel -1, por ejemplo.
#29
Me ha surgido una duda con ese código. No sería mucho más fácil generar un numero aleatorio entre 1 y 2?. Igual me equivoco y si es así ruego que se me corrija...

Código (cpp) [Seleccionar]

int i = rand() % 2 + 1;
#30
Gracias por las respuestas, intentare abrir los puertos que deba usar :)