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
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]);
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.
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).
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
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
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.
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.
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):
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.
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();
}
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. –
[count serie] questo sembra funzionare il più facile in Objective-C
È possibile utilizzare [count XYZ] per ottenere la lunghezza dell'array
La domanda riguarda l'array C, dove non è presente un selettore di conteggi. – Vive
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
@Darpan: Funziona solo quando dichiari int foo [5], non int foo []. – mouviciel
d'accordo w/mouviciel, questo non otterrà quello che vuoi. – pxl