No he encontrado respuesta en ninguna de las preguntas. Estoy pasando una matriz de enteros a una función. Ahora quiero atravesar la matriz. Pero como las cosas funcionaron en C, C++ simplemente usando arrayname.length que dio la cantidad de elementos en la matriz. ¿Cuál es la manera de encontrar eso? [NSArrayObject length] funciona para el tipo NSArray pero lo quiero para int []. ni siquiera [Cuenta XYZ] funciona ... así que quiero otra forma de averiguarlo.Longitud de una matriz en el objetivo C
Respuesta
No hay nada específico para Objective-C con una matriz de entradas. Se podría utilizar la misma técnica que si estuviera usando C.
sz = (sizeof foo)/(sizeof foo[0]);
¿Huh? En C, no hay tal cosa como "arrayname.length". Una matriz de un tipo primitivo, como int[]
, no tiene ninguna información de longitud asociada en tiempo de ejecución.
No hay tal cosa como array.length
en C. Un int matriz en Objective-C se exactamente el mismo como una matriz int en C. Si se define de forma estática como int foo[5]
, entonces usted puede hacer sizeof(foo)
para obtener el tamaño - pero solo en la misma función foo
se define en (para otras funciones, es solo un puntero int, no una matriz per se). De lo contrario, no hay una forma inherente de obtener esta información. Debe pasar el tamaño o usar valores centinela (como el término '\ 0' en C strings, que son solo matrices de char).
Busco longitud decir, número de elementos en una matriz de enteros. y no sizeof.as wen id o sizeof simplemente me devuelve el tamaño de int – Darpan
Como dije, no se puede hacer. 'sizeof()' funciona para arreglos de tamaño estático como el ejemplo que di más arriba en la misma función en la que están definidos. Eso es lo más cerca que C ayuda a esto. – Chuck
Una matriz es básicamente sólo una dirección de memoria para el inicio de un bloque de memoria que se ha asignado para la matriz. Para usarlo realmente, debes recordar la duración de alguna manera después de haberla creado. Puede pasar la longitud de cada función, o ajustar la matriz y la longitud en otra estructura, pasando esa estructura.
parece un trabajo para NSMutableArray
. ¿Hay alguna razón por la que necesites trabajar con una matriz C? si no, considere NSMutableArray
.
puedo estar equivocado (así que corrígeme si lo estoy), pero no hay una manera fácil en C para obtener el tamaño de int [] en tiempo de ejecución. Tendría que hacer algo como crear una estructura para mantener su matriz y un int donde puede realizar un seguimiento de la cantidad de elementos en su matriz usted mismo.
incluso más elegante, puede hacer que su estructura contenga su matriz y un bloque. entonces puedes diseñar el bloque para hacer el seguimiento por ti.
pero esta es más una pregunta C, no una pregunta objetiva.
Si desea una matriz de enteros, envuélvalos en objetos NSNumber y colóquelos en un NSArray.
Lo que están pidiendo que haga, no es realmente soportado bien en C, aunque hay un método en el mac puede probar (malloc_size):
No hay tal cosa como arrayname.length
en C. Es por eso que muchas funciones toman pares de argumentos, un argumento con la matriz y un argumento con la longitud de la matriz. El caso más obvio para esto es la función principal.Usted puede encontrar esta función es todos sus proyectos de iPhone en un archivo llamado main.m
, que se verá algo como esto:
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
Aviso cómo el argv
agument es un reflector v o matriz de cadenas, y el argc
argumento es un c cantidad de elementos que están en esta matriz.
Deberá hacer lo mismo para todos los tipos primitivos, esta es la parte C de Objective-C. Si permanece en el Objetivo partes que usan NSArray o subclases funciona bien, pero requiere que todos los elementos sean objetos.
Este código se puede usar cuando no se conoce el número total de elementos en la matriz.
main()
{
int a[]={1,2,3,4,5,6,7}
int i;
clrscr();
for (i=0;i<=((sizeof(a)/sizeof(int));i++)
{
puts(a[i]);
}
getch();
}
4 espacios antes de que una línea de texto le indique al sitio que use el formato del código. Para colocar rápidamente 4 espacios antes de muchas líneas de código, seleccione todas las líneas y haga clic en el botón ** {} **. Lo arreglé para ti, para que sea legible. –
[recuento de matriz] esto parece trabajar lo más fácil en Objective-C
se puede utilizar [recuento XYZ] para obtener la longitud de la matriz
La pregunta es sobre la matriz C, donde no hay selector de recuento. – Vive
- 1. obteniendo NSArray longitud/recuento - Objetivo C
- 2. Matriz de una longitud desconocida en C#
- 3. ¿Imprimir matriz en objetivo-c?
- 4. Cómo inicializar una matriz mutable vacía en el Objetivo C
- 5. ¿Cómo implemento una matriz de bits en C/Objetivo C
- 6. Objetivo C - matriz con números
- 7. Tamaño de matriz (longitud) en C#
- 8. Ajuste del objetivo C en el objetivo C++/C++
- 9. Declaración de una matriz de longitud negativa
- 10. Matriz de longitud cero
- 11. ¿Cómo convertir una cadena a una matriz en el objetivo C?
- 12. Selectores en el objetivo C
- 13. ¿Sobrecarga de la matriz de longitud variable en C++?
- 14. Crear una matriz a partir de un archivo CSV utilizando el objetivo C
- 15. Crear una matriz re-considerable de CGPoints en el objetivo-c
- 16. Objetivo-C: ¿Cuenta el número de veces que un objeto ocurre en una matriz?
- 17. ¿Cómo puedo hacer una matriz de CGFloats en el objetivo c?
- 18. Cómo crear una matriz de cadenas en el objetivo c para iphone
- 19. Caret en el objetivo C
- 20. pi en el objetivo C
- 21. constructor en el objetivo c
- 22. __OBJC__ en el objetivo C
- 23. epub en el objetivo c
- 24. Divide matriz en fragmentos de N longitud
- 25. Cómo configurar la longitud de la matriz en C# dinámicamente
- 26. Compilar C# en el objetivo-C
- 27. El uso de matriz de longitud cero
- 28. Cómo aumentar la longitud de una matriz
- 29. Escribir una cadena en una matriz de bytes de longitud fija en C#
- 30. cómo obtener la ubicación actual en latitud y longitud en el objetivo c
Intenté esto ... vi dis para una matriz de 2 dimensiones pero mi matriz es de dimensión única ... como solo int foo [] así que si hago sizeof (foo)/sizeof (foo [0]) devuelve 4/4, es decir, 1 ... ya lo he probado ... pero no hay suerte ... ¿hay alguna otra manera? Gracias – Darpan
@Darpan: Esto funciona solo cuando declara int foo [5], no int foo []. – mouviciel
de acuerdo con mouviciel, esto no obtendrá lo que desea. – pxl