objective c - Länge eines Arrays in Ziel C



objective-c find (7)

Ein Array ist im Grunde nur eine Speicheradresse an den Anfang eines Speicherblocks, der für das Array reserviert wurde. Um es tatsächlich zu verwenden, müssen Sie sich die Länge irgendwie merken, nachdem es erstellt wurde. Sie können entweder die Länge an jede Funktion übergeben oder das Array und die Länge in einer anderen Struktur umhüllen und diese Struktur herumreichen.

https://ffff65535.com

Ich habe in keiner der gestellten Fragen eine Antwort gefunden. Ich übergebe ein Integer-Array an eine Funktion. Nun möchte ich das Array durchqueren. Aber so wie die Dinge in C funktionierten, C ++, indem man einfach arraysame.length verwendete, was die Anzahl der Elemente im Array ergab. Wie finde ich das? [NSArrayObject length] funktioniert für den NSArray-Typ, aber ich möchte es für int []. nicht einmal [XYZ-Zählung] funktioniert .... also will einen anderen Weg, das herauszufinden.


Es gibt keine array.length in C. Ein int-Array in Objective-C ist genau das gleiche wie ein int-Array in C. Wenn es statisch wie int foo[5] , können Sie sizeof(foo) tun bekomme die Größe - aber nur in der gleichen Funktion, in der foo definiert ist (zu anderen Funktionen ist es nur ein int-Zeiger, kein Array per se). Andernfalls gibt es keine inhärente Möglichkeit, diese Informationen zu erhalten. Sie müssen entweder die Größe übergeben oder Sentinel-Werte verwenden (wie das abschließende '\ 0' in C-Strings, die nur Arrays von char sind).


Objective-C enthält nichts Spezifisches mit einem Array von Ints. Sie würden die gleiche Technik verwenden, als ob Sie C verwenden würden.

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

So etwas wie arrayname.length in C nicht. Deshalb nehmen so viele Funktionen Argumentpaare an, ein Argument mit dem Array und ein Argument mit der Länge des Arrays. Der offensichtlichste Fall hierfür ist die Hauptfunktion. Sie können diese Funktion finden Sie alle Ihre iPhone-Projekte in einer Datei mit dem Namen main.m , wird es in etwa so aussehen:

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

Beachten Sie, dass das argv agument ein vector oder ein Array von Strings ist und dass das Argument argc eine Menge davon ist, wie viele Elemente sich in diesem Array befinden.

Sie müssen dasselbe für alle primitiven Typen tun, das ist der C- Teil von Objective-C. Wenn Sie mit NSArray oder Unterklassen in den Objective- Teilen bleiben, funktioniert das gut, aber alle Elemente müssen Objekte sein.


Dieser Code kann verwendet werden, wenn die Gesamtzahl der Elemente im Array nicht bekannt ist.

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

[array count] Dies scheint am einfachsten in objective-c zu funktionieren


Wenn Sie ein Array mit ganzen Zahlen haben möchten, wickeln Sie sie in NSNumber-Objekte ein und fügen Sie sie in ein NSArray ein.

Was Sie tun möchten, wird in C nicht wirklich gut unterstützt, obwohl es eine Methode auf dem Mac gibt, die Sie ausprobieren könnten (malloc_size):

Bestimmen der Größe des dynamisch zugewiesenen Speichers in c





find