Tengo una matriz de int
y necesito encontrar la cantidad de elementos en ella. Sé que tiene algo que ver con sizeof
pero no estoy seguro de cómo usarlo exactamente.¿Cómo puedo encontrar la cantidad de elementos en una matriz?
Respuesta
int a[20];
int length;
length = sizeof(a)/sizeof(int);
y se puede utilizar otra manera de hacer que su código no ser modificable a int
dicen que si tiene una matriz array
sólo tiene que:
int len = sizeof(array)/sizeof(array[0]);
Si tiene su matriz en alcance, puede usar sizeof
para determinar su tamaño en bytes y usar la división para calcular la cantidad de elementos:
#define NUM_OF_ELEMS 10
int arr[NUM_OF_ELEMS];
size_t NumberOfElements = sizeof(arr)/sizeof(arr[0]);
Si usted recibe una matriz como un argumento de función o asignar una matriz en el montón que no se puede determinar su tamaño mediante el sizeof
. Vas a tener que almacenar/pasar la información de tamaño de alguna manera para poder utilizarlo:
void DoSomethingWithArray(int* arr, int NumOfElems)
{
for(int i = 0; i < NumOfElems; ++i) {
arr[i] = /*...*/
}
}
personalmente creo que sizeof (a)/sizeof (* a) se ve más limpio.
También prefiero definirlo como una macro:
#define NUM(a) (sizeof(a)/sizeof(*a))
A continuación, puede utilizarlo en fines de bucles, de esta manera:
for (i = 0; i < NUM(a); i++)
Podría hacer esto, pero resultaría en el cálculo del tamaño cada vez que realiza la prueba en el ciclo for, así que una vez cada iteración. Y entonces estaría haciendo división cada vez a través del ciclo. Sería más eficiente asignar el resultado de 'NUM (a)' a una variable de instancia justo encima del bucle, y usar ese valor en el bucle. – Gavin
@Gavin no, no calcularía el tamaño para cada iteración. El compilador es lo suficientemente inteligente como para ver que los resultados de cada tamaño y de la división son constantes y determina el resultado en tiempo de compilación, que luego compila en el código como un número constante. Es posible que haya sido engañado por el aspecto de la aplicación 'sizeof', que se ve como una función debido a los paréntesis, pero no es una función. 'sizeof' es un operador y los paréntesis son solo una convención. – blubberdiblub
template <typename Type, int N>
inline int getElementCount(Type (&array)[N])
{
(void)array; // (required to avoid a spurious warning in MS compilers)
(void)sizeof(0[array]); // This line should cause an error if you pass an object with a user-defined subscript operator
return N;
}
Lenguaje incorrecto. –
utilicé siguiente código como se sugirió anteriormente para evaluar el número de elementos en mi matriz bidimensional:
#include <stdio.h>
#include <string.h>
void main(void)
{
char strs[3][20] =
{
{"January"},
{"February"},
{""}
};
int arraysize = sizeof(strs)/sizeof(strs[0]);
for (int i = 0; i < arraysize; i++)
{
printf("Month %d is: %s\n", i, strs[i]);
}
}
Funciona muy bien. Por lo que sé, no puedes mezclar diferentes tipos de datos en matrices C y también debes tener el mismo tamaño de todos los elementos de la matriz (si estoy en lo cierto), por lo tanto puedes aprovecharlo con este pequeño truco:
- número de recuento de bytes con función sizeof() desde toda matriz 2D (en este caso 3 * 20 = 60 bytes) número
- recuento de bytes con sizeof() la función de primeros RTS elemento de matriz [0] (en este caso 20 bytes)
- dividir el tamaño del conjunto con el tamaño de un elemento lo que le dará el número de elementos
Este recorte debe ser portátil para arreglos 2D en C; sin embargo, en otros lenguajes de programación no podría funcionar porque puede usar diferentes tipos de datos dentro de una matriz con diferentes tamaños (como en JAVA).
No es posible encontrar la cantidad de elementos en una matriz a menos que sea una matriz de caracteres. Considere el siguiente ejemplo:
int main()
{
int arr[100]={1,2,3,4,5};
int size = sizeof(arr)/sizeof(arr[0]);
printf("%d", &size);
return 1;
}
El valor anterior nos da el valor 100 incluso si el número de elementos es cinco. Si se trata de una matriz de caracteres, puede buscar linealmente la cadena nula al final de la matriz y aumentar el contador a medida que avanza.
I cosa que quería escribir: 'printf ("% d ", tamaño);'. Pero estás en lo cierto, ¡puedes encontrar solo el tamaño definido de la matriz, no el tamaño real! – uetoyo
#include<stdio.h>
int main()
{
int arr[]={10,20,30,40,50,60};
int *p;
int count=0;
for(p=arr;p<&arr+1;p++)
count++;
printf("The no of elements in array=%d",count);
return 0;
}
de salida = 6
EXPLICACIÓN
p
es un puntero a una matriz de 1-D, y en el bucle for(p=arr,p<&arr+1;p++)
hice p
punto a la dirección base . Supongamos que su dirección base es 1000; si incrementamos p
, apunta a 1002 y así sucesivamente. Ahora llegando al concepto de &arr
- Básicamente representa toda la matriz, y si agregamos 1 a toda la matriz, es decir &arr+1
, da la dirección 1012, es decir, la dirección de la siguiente matriz 1-D (en nuestro caso, el tamaño de int es 2), por lo que la condición se convierte en 1000 < 1012.
así que, básicamente, la condición se convierte
for(p=1000;p<1012;p++)
y ahora vamos a ver la condición y contar el valor
- primera vez
p=1000
yp<1012
condición estrue
: entrar en el bucle, incrementar el valor decount
a 1. - segundo tiempo
p=1002
yp<1012
condición estrue
: entrar en el bucle, incremente el valor decount
a 2. - ...
- 6ª vez
p=1010
yp<1012
condición estrue
: entrar en el bucle, incrementar el valor decount
a 6. - última vez
p=1012
yp<1012
condición es falsa: imprimir el valor decount=6
enprintf
declaración.
Esto no funciona (al menos en C++). Tendría que convertir '& arr + 1' en (int *) así:' for (p = arr; p <(int *) (& arr + 1); p ++) ' – Staszek
En realidad, no hay una forma adecuada de contar los elementos en una matriz de enteros dinámicos. Sin embargo, el comando sizeof funciona correctamente en Linux, pero no funciona correctamente en Windows. Desde el punto de vista de un programador, no se recomienda usar sizeof para tomar la cantidad de elementos en una matriz dinámica. Deberíamos hacer un seguimiento de la cantidad de elementos al hacer la matriz.
El operador' sizeof' solo devolverá el * size * de una matriz * declarada dentro del mismo ámbito *, de lo contrario, 'sizeof' simplemente informa el tamaño del * puntero * al que la matriz se convirtió cuando pasó como parámetro. No tiene nada que ver con el sistema operativo y no hay ninguna recomendación contra el uso de 'sizeof' en cualquiera que no sea la comprensión de lo que está tomando el' sizeof'. (* sin juego de palabras *). –
i su mayoría se encuentran una manera fácil de ejecutar la longitud de la matriz dentro de un bucle al igual que
int array[] = {10, 20, 30, 40};
int i;
for (i = 0; i < array[i]; i++) {
printf("%d\n", array[i]);
}
Si no sabemos el número de elementos de la matriz y cuando la entrada está dada por la usuario en el tiempo de ejecución. Entonces podemos escribir el código como
C CÓDIGO:
while(scanf("%d",&array[count])==1) {
count++;
}
código C++:
while(cin>>a[count]) {
count++;
}
Ahora el recuento va a tener el recuento del número de elementos de matriz que se introducen.
- 1. C - cantidad de elementos en una matriz?
- 2. Encontrar una gran cantidad de valores consecutivos cumpliendo la condición en una matriz numpy
- 3. Encontrar elementos únicos en una matriz de cadenas en C
- 4. Encontrar la diferencia mínima entre elementos en una matriz
- 5. ¿Cómo obtener la cantidad de elementos en una estructura?
- 6. C: encontrar el número de elementos en una matriz []
- 7. ¿Cómo puedo contar la cantidad de niños?
- 8. ¿Dónde puedo encontrar una gran cantidad de archivos de texto?
- 9. elementos Encontrar y filtrado en una matriz de células MATLAB
- 10. ¿Cómo puedo intercambiar dos elementos en una matriz observable?
- 11. ¿Cómo puedo contar los números únicos en una matriz sin reorganizar los elementos de la matriz?
- 12. ¿Aleatorizar elementos en una matriz?
- 13. ¿Cómo puedo encontrar las palabras en la matriz de letras
- 14. ¿Cómo obtener la cantidad de elementos en un cuadro combinado?
- 15. ¿Cómo puedo obtener elementos de una matriz con Template Toolkit?
- 16. ¿Cómo puedo encontrar .index de una matriz multidimensional
- 17. ¿Cómo puedo encontrar el tamaño de una matriz 2D?
- 18. Algoritmo para encontrar agregados elementos/retirados de una matriz
- 19. ¿Cómo encontrar la longitud de una matriz de cadenas?
- 20. ¿Cómo puedo encontrar la longitud de una matriz asociativa en ActionScript 3.0?
- 21. ¿Cómo contar la cantidad de elementos en un NSArray?
- 22. ¿Cómo puedo encontrar la cantidad de claves en un hash en Perl?
- 23. Perl - Cómo obtener la cantidad de elementos en una matriz anónima, para recortar de forma concisa nombres de ruta
- 24. Algoritmo de Javascript para encontrar elementos en la matriz que no están en otra matriz
- 25. Encontrar la subsecuencia con la suma más grande de elementos en una matriz
- 26. ¿Cómo puedo obtener el producto de todos los elementos en una una matriz tridimensional numpy
- 27. ¿Cómo pasar elementos de una matriz a la función variadic?
- 28. ¿Cómo puedo encontrar la cantidad de registros en un cursor Oracle PL/SQL?
- 29. Agregar elementos de una matriz
- 30. Número de elementos en matriz estática y matriz dinámica
Echa un vistazo a esto. http://stackoverflow.com/questions/4081100/c-finding-the-number-of-elements-in-an-array – twain249
Si está en MSVC, tiene _countof –
Si bien todos tienen la solución, quiero señale que es muy probable que no haya forma de encontrar el tamaño de una matriz dinámica a menos que haya grabado el tamaño porque sizeof (a) del puntero a es el tamaño del puntero 'int * a = new int [10 ] 'en este caso encontrar' sizeof (* a) 'es de 4 bytes. Por lo tanto, es importante mantener la verificación del tamaño de la matriz. – CppLearner