¿Cómo obtener la longitud de una matriz en C? ¿Es “tamaño de” una solución? [duplicate]

3 minutos de lectura

avatar de usuario
alishaik786

Posible duplicado:

¿Tamaño de una matriz en el lenguaje de programación C?
¿Por qué un C-Array tiene un valor incorrecto de sizeof() cuando se pasa a una función?

Vea el siguiente código y sugiérame cuál es la diferencia de “tamaño de“palabra clave cuando usé así:

#include<stdio.h>
#include<conio.h>
void show(int ar[]);
void main()
{
    int arr[]={1,2,3,4,5};
    clrscr();
    printf("Length: %d\n",sizeof(arr));
    printf("Length: %d\n",sizeof(arr)/sizeof(int));
    show(arr);
    getch();
}
void show(int ar[])
{
   printf("Length: %d", sizeof(ar));
   printf("Length: %d", sizeof(ar)/sizeof(int));
}

Pero la salida es así:

La salida es:

Longitud: 10

Longitud: 5

Longitud: 2

Longitud: 1

por qué me estoy poniendo así; Si quiero llevar todos los datos de una matriz a otra matriz, ¿cómo puedo hacerlo?

Sugiérame si alguien sabe.

  • No puede obtener el tamaño de una matriz en C sin más información.

    – m0skit0

    23 de febrero de 2012 a las 12:31

  • @Oli Charlesworth: busqué en Google pero no obtuve el enlace que me proporcionó; Gracias por proporcionar;

    – alishaik786

    23 de febrero de 2012 a las 12:41

  • No puede obtener el tamaño de un parámetro de matriz.

    – Lame caliente

    07/09/2014 a las 13:50

avatar de usuario
relajarse

Las matrices se descomponen en punteros en las llamadas a funciones. No es posible calcular el tamaño de una matriz que solo se representa como un puntero de ninguna manera, incluido el uso sizeof.

Debe agregar un argumento explícito:

void show(int *data, size_t count);

En la llamada, puede utilizar sizeof para calcular el número de elementos, para arreglos reales:

int arr[] = { 1,2,3,4,5 };

show(arr, sizeof arr / sizeof *arr);

Tenga en cuenta que sizeof te da el tamaño en unidades de charrazón por la cual la división por lo que es esencialmente sizeof (int) es necesario, o obtendría un valor demasiado alto.

También tenga en cuenta, como un punto de interés y limpieza, que sizeof es no Una función. Los paréntesis solo son necesarios cuando el argumento es un nombre de tipo, ya que el argumento es una expresión tipo cast (p. ej. sizeof (int)). A menudo puede salirse con la suya sin nombrar los tipos reales, haciendo sizeof en datos en su lugar.

  • show(arr, tamaño de arr / tamaño de *arr);

    – Során

    5 sep 2014 a las 18:21

  • @Soran ¡Gracias, arreglado!

    – relajarse

    7 sep 2014 a las 13:43

  • Si bien creo que esta es la mejor solución general, es decir, pasar la longitud y la matriz, creo que también vale la pena señalar que para las matrices estáticas (es decir, la longitud no cambia durante la ejecución del programa), la solución más simple es establecer el tamaño de la matriz en el código fuente con una definición de preprocesador #define. Por ejemplo, #define ARRAY_SIZE 5

    – Cuenta

    31 mayo 2015 a las 20:42


Esa es la razón por la cual, al escribir una función que toma una matriz, se declaran dos parámetros. uno que es un puntero a la matriz, el otro que define el tamaño de la matriz.

show() toma la dirección de la matriz que se almacena en 2 bytes. Piense en ello como int *ar.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad