2009-10-07 11 views
27

Non ho trovato risposta in nessuna delle domande poste. Sto passando un array intero a una funzione.Ora voglio attraversare l'array.Ma come le cose hanno funzionato in C, C++ semplicemente usando arrayname.length che ha dato il numero di elementi in array. Qual è il modo per trovarlo? [Lunghezza NSArrayObject] funziona per il tipo NSArray ma lo voglio per int []. nemmeno [conteggio XYZ] funziona .... quindi vuoi un altro modo per scoprirlo.Lunghezza di una matrice nell'obiettivo C

risposta

20

Non c'è nulla di specifico in Objective-C con una matrice di interi. Si potrebbe utilizzare la stessa tecnica, come se si stesse utilizzando C.

sz = (sizeof foo)/(sizeof foo[0]); 
+0

Ho provato questo ... ho visto dis per un array a 2 dimensioni ma il mio array è a dimensione singola ... come solo int foo [] così wen faccio sizeof (foo)/sizeof (foo [0]) restituisce 4/4 cioè 1 .. ho già provato ... ma senza fortuna ... c'è un altro modo? Grazie – Darpan

+2

@Darpan: Funziona solo quando dichiari int foo [5], non int foo []. – mouviciel

+0

d'accordo w/mouviciel, questo non otterrà quello che vuoi. – pxl

5

Eh? In C, non esiste una cosa come "arrayname.length". Un array di un tipo primitivo, ad esempio int[], non ha alcuna informazione di lunghezza associata ad esso in fase di esecuzione.

17

Non esiste una cosa come array.length in C. Un int array in Objective-C è esattamente lo stesso come un array int in C. Se è staticamente definito come int foo[5], allora si può fare sizeof(foo) per ottenere la dimensione - ma solo nella stessa funzione è definito foo in (per altre funzioni, è solo un puntatore int, non un array di per sé). Altrimenti, non esiste un modo intrinseco per ottenere queste informazioni. Devi passare la dimensione o utilizzare i valori sentinella (come il terminante '\ 0' in stringhe C, che sono solo array di caratteri).

+0

Cerco lunghezza cioè il numero di elementi in un array intero. e non sizeof.as per la dimensione di esso semplicemente mi restituisce la dimensione di int – Darpan

+4

Come ho detto, non può fare. 'sizeof()' funziona con array di dimensioni statiche come nell'esempio che ho dato sopra nella stessa funzione in cui sono definiti. Questo è il C più vicino che viene a supportarlo. – Chuck

5

Un array è fondamentalmente solo un indirizzo di memoria per l'inizio di un blocco di memoria che è stato assegnato per l'array. Per usarlo effettivamente, è necessario ricordare la lunghezza in qualche modo dopo che è stato creato. È possibile passare la lunghezza di ogni funzione o avvolgere sia la matrice che la lunghezza in un'altra struttura, passando quella struttura.

1

sembra un lavoro per NSMutableArray. c'è un motivo per cui hai bisogno di lavorare con un array C? in caso contrario, considerare NSMutableArray.

potrei sbagliarmi (quindi per favore correggimi se lo sono), ma non c'è un modo semplice in C per ottenere la dimensione di int [] in fase di esecuzione. dovresti fare qualcosa come creare una struttura per tenere il tuo array e un int dove puoi tenere traccia di quanti oggetti nel tuo array tu stesso.

ancora più elaborato, puoi rendere la tua struttura contenere il tuo array e un blocco. quindi puoi progettare il blocco per eseguire il tracciamento per te.

ma questa è più una domanda C, non un quesiton oggettivo.

1

Se si desidera un array di numeri interi, inserirli in oggetti NSNumber e inserirli in un NSArray.

quello che stai chiedendo di fare, non è realmente supportato bene in C anche se c'è un metodo sul Mac si potrebbe provare (malloc_size):

determine size of dynamically allocated memory in c

2

Non esiste una cosa come arrayname.length in C. Ecco perché così tante funzioni prendono coppie di argomenti, un argomento con l'array e un argomento con la lunghezza dell'array. Il caso più ovvio per questo è la funzione principale.Potete trovare questa funzione è tutti i vostri progetti di iPhone in un file denominato main.m, sarà simile a questa:

int main(int argc, char *argv[]) {  
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

Notate come l'agument argv è un ettore v, o array di stringhe, e il argc argomento è un c ount di quanti elementi sono in questo array.

Dovrai fare la stessa cosa per tutti i tipi primitivi, questa è la C parte di Objective-C. Se si soggiorna nell'le parti dell'obiettivo utilizzando NSArray o le sottoclassi funzionano correttamente, ma è necessario che tutti gli elementi siano oggetti.

3

questo codice può essere utilizzato quando il numero totale di elementi nell'array non è noto.

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 spazi prima che una riga di testo indichi al sito di utilizzare la formattazione del codice. Per inserire rapidamente 4 spazi prima di molte righe di codice, seleziona tutte le linee e fai clic sul pulsante ** {} **. L'ho sistemato per te, per renderlo leggibile. –

2

[count serie] questo sembra funzionare il più facile in Objective-C

28

È possibile utilizzare [count XYZ] per ottenere la lunghezza dell'array

+1

La domanda riguarda l'array C, dove non è presente un selettore di conteggi. – Vive

Problemi correlati