Ich habe also einen Code, der so aussieht:
%Vor%und die arrayGen-Funktion sieht so aus:
%Vor%Im Moment sagt mir der Compiler "warning: Passing Argument 1 von 'arrayGen' macht Integer vom Zeiger ohne einen Cast"
Ich denke, dass ich 'a', einen Zeiger auf ein [0] übergebe, und da das Array bereits erstellt wurde, kann ich einfach Werte für [n] eingeben, bis I a [n] == '\ 0 ". Ich denke mein Fehler ist, dass ArrayGen geschrieben wird, um ein Array aufzunehmen, nicht einen Zeiger auf eins. Wenn das stimmt, bin ich nicht sicher, wie es weitergeht, schreibe ich Werte in Adressen, bis der Inhalt einer Adresse '\ 0' ist?
Die grundlegende Magie hier ist diese Identität in C:
%Vor%Okay, jetzt mache ich das lesbare Englisch.
Hier ist das Problem: Ein Array-Name ist kein Lvalue; es kann nicht zugewiesen werden. Also die Zeile, die du hast mit
%Vor%ist das Problem. Siehe dieses Beispiel:
%Vor%was den Kompilierungsfehler ergibt:
%Vor%Sie müssen einen Zeiger haben, der ist ein lvalue, dem die Ergebnisse zugeordnet werden.
Dieser Code zum Beispiel:
%Vor%kompiliert gut:
%Vor%Beachten Sie, dass Sie die IP-Adresse, wie oben in diesem Code beschrieben, wegen der Identität oben als Array behandeln können:
%Vor%Nur der Vollständigkeit halber ist hier mein vollständiges Beispiel:
%Vor%Hmm, ich weiß, dass deine Frage beantwortet wurde, aber etwas anderes am Code nervt mich. Warum verwenden Sie den Test gegen '\ 0', um das Ende des Arrays zu bestimmen? Ich bin mir ziemlich sicher, dass das nur mit C-Saiten funktioniert. Der Code kompiliert tatsächlich nach dem vorgeschlagenen Fix, aber wenn Sie Ihr Array durchlaufen, bin ich gespannt, ob Sie die richtigen Werte erhalten.
Ich bin nicht sicher, was Sie zu tun versuchen, aber die Zuweisung eines Zeigerwertes zu einem Array ist, was den Compiler stört, wie in Charlie . Ich bin neugierig auf die Nul-Charakter-Konstante '
. Ihr Beispiel-Array ist nicht initialisiert Speicher, so dass der Vergleich in arrayGen
'static
wird nicht tun, was Sie tun sollen.
Die von Ihnen verwendete Parameterliste ist identisch mit:
%Vor%für die meisten Zwecke. Die tatsächliche Aussage in der Norm ist:
Eine Deklaration eines Parameters als "Array von type " soll an "qualified pointer to type " angepasst werden, wobei die Typ-Qualifikationsmerkmale (falls vorhanden) die angegebenen sind innerhalb der [und] der Array-Typ-Ableitung. Wenn das Schlüsselwort %code% auch innerhalb der [und] der Derivation des Array-Typs erscheint, muss der Wert des entsprechenden tatsächlichen Arguments für jeden Aufruf der Funktion Zugriff auf das erste Element von a bereitstellen Array mit mindestens so vielen Elementen wie vom Größenausdruck angegeben.
Wenn Sie den Aufrufer wirklich zwingen möchten, ein Array zu verwenden, verwenden Sie die folgende Syntax:
%Vor%Ihr Compiler sollte sich beschweren, wenn Sie ihn mit irgendetwas aufrufen, das kein Zeiger auf ein Array von 10 ganzen Zahlen ist. Ich kann ehrlich sagen, dass ich diesen irgendwo außerhalb von verschiedenen Büchern ( The C Book , Experten-C-Programmierung ) ... zumindest nicht in C-Programmierung. In C ++ hatte ich jedoch Grund, diese Syntax in genau einem Fall zu verwenden:
%Vor%Ihr Kilometerstand kann jedoch variieren. Wenn Sie wirklich in solche Dinge graben wollen, kann ich C-Programmierung nicht genug empfehlen. Sie finden das The C Book online unter gbdirect .
Versuchen Sie, Ihren Parameter int* arrAddr
, nicht int arrAddr[]
aufzurufen. Wenn ich darüber nachdenke, sind die Parameter für die Methode main
ähnlich, aber das funktioniert. Ich bin also nicht sicher über den Erklärungsteil.
Bearbeiten: Hm alle Ressourcen, die ich im Internet finden kann sagen, es sollte funktionieren. Ich bin mir nicht sicher, ich habe Arrays immer selbst als Zeiger übergeben, also hatte ich diesen Fehler nie zuvor, also bin ich sehr an der Lösung interessiert.