Dimensión de Arreglos en C

Iniciado por Principios en C, 25 Septiembre 2011, 17:24 PM

0 Miembros y 2 Visitantes están viendo este tema.

LearningSpanishProgrammer

El_Java, su codigo no és correcto para cualquier arreglo que fue recibido como argumento de una función.

El arreglo decae para un puntero para su primer elemento.
Estoy aprendiendo español, y tu estas aprendiendo programación

Principios en C

Gracias por responder... pero la verdad sigo en las mismas... y ya me desepere... :-(

LearningSpanishProgrammer

no a problema, hace un bucle que debe crear un arreglo en cada iterácion con tamaño 'i'. Cuando el 'malloc' devuelven NULL, esto és su limite.

Buena Suerte.
Estoy aprendiendo español, y tu estas aprendiendo programación

Principios en C

Me lo podrias explicar mejor... es que la verdad que no entiendo muy bien... pero con iteración??

LearningSpanishProgrammer

Entiendo que tu quieres saber cuál és el tamaño máximo de un arreglo:



while (1)
{
    char * arreglo = malloc(sizeof(char) * i);

   // Ahora adiciona código para comprobar si la allocacion es correcta
   // Y tambíen libera la memoria!!

    // Uno en este caso.
    i += sizeof(char);
}


Yo no puede testar eso ahora.
Estoy aprendiendo español, y tu estas aprendiendo programación

Principios en C

agradezco tu ayuda.. en verdad... ahora tratare de entender que me dijiste  jijij... porque siento que esas son palabras mayores para el nivel  que tengo, pero gracias

leogtz

Cita de: LearningSpanishProgrammer en 25 Septiembre 2011, 21:01 PM



while (1)
{
    char * arreglo = malloc(sizeof(char) * i);

   // Ahora adiciona código para comprobar si la allocacion es correcta
   // Y tambíen libera la memoria!!

    // Uno en este caso.
    i += sizeof(char);
}



El tamaño de un char siempre es 1. No hay necesidad del sizeof
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

LearningSpanishProgrammer

No me gusta de números mágicos.
Muchas personas consideran usar "sizeof" una buena práctica.
Otros, creen que es confuso.
Estoy aprendiendo español, y tu estas aprendiendo programación

rir3760

Cita de: LearningSpanishProgrammer en 26 Septiembre 2011, 00:10 AM
No me gusta de números mágicos.
Muchas personas consideran usar "sizeof" una buena práctica.
Leo Gutiérrez se refiere al uso de sizeof en esta linea:
char * arreglo = malloc(sizeof(char) * i);
Todo compilador que cumpla con el estándar de C debe evaluar "sizeof(char)" resultando en 1 y la multiplicación por este no tiene sentido ya que no afecta el resultado. Por ello se puede abreviar a:
char * arreglo = malloc(i);

En cuanto al tamaño máximo que puede tener un array este depende del compilador utilizado. Ello porque el estándar del lenguaje permite indicar el numero de elementos en un array mediante una expresión constante de tipo entero (cualquier tipo, por ejemplo "int" o "unsigned long") mayor que cero.

Lo que debe hacer el OP (el usuario Principios en C) es revisar la documentación de su compilador.

Un saludo
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

LearningSpanishProgrammer

#19
rir3760, lo sé, pero, en mi opinión es mas claro y más uniforme usar sizeof().

Ejemplo:

void * v0 = malloc(n * sizeof(char))
void * v1 = calloc(n, sizeof(char))
void * v2 = malloc(n);
void * v3 = calloc(i, 1);


ya que sizeof(type) es una expresión completa en tiempo de compilación no afectas el tiempo de ejecucíon.

Muchas personas no gustam Java no tener "sizeof" por eso. C# tienes.


    Console.WriteLine("The size of short is {0}.", sizeof(short));


Aun teniendo en cuenta sus tipos tienen tamaño fijo (No estoy seguro si he escrito bien)
Estoy aprendiendo español, y tu estas aprendiendo programación