2009-10-07 675 views
27

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

20

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]); 
+0

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

+2

@Darpan: Esto funciona solo cuando declara int foo [5], no int foo []. – mouviciel

+0

de acuerdo con mouviciel, esto no obtendrá lo que desea. – pxl

5

¿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.

17

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).

+0

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

+4

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

5

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.

1

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.

1

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):

determine size of dynamically allocated memory in c

2

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.

3

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(); 
} 
+2

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. –

2

[recuento de matriz] esto parece trabajar lo más fácil en Objective-C

28

se puede utilizar [recuento XYZ] para obtener la longitud de la matriz

+1

La pregunta es sobre la matriz C, donde no hay selector de recuento. – Vive

Cuestiones relacionadas