Übergeben Sie ein array von structs in C
Ich habe Probleme beim übergeben ein array von Strukturen an eine Funktion in C.
Habe ich die Struktur, wie dies in main:
int main()
{
struct Items
{
char code[10];
char description[30];
int stock;
};
struct Items MyItems[10];
}
Ich dann darauf zugreifen wie: MyItems[0].stock = 10;
etc.
Möchte ich übergeben an eine Funktion so auf:
ReadFile(MyItems);
Die Funktion sollte Lesen Sie das array, und in der Lage sein, um es zu Bearbeiten. Dann sollte ich in der Lage sein, um Zugriff auf das gleiche array von anderen Funktionen.
Habe ich versucht, den Haufen von Erklärungen, aber keiner von Ihnen arbeiten.
z.B.
void ReadFile(struct Items[10])
Ich habe einen Blick um für andere Fragen, aber die Sache ist, Sie sind alle anders getan, mit typedefs und Sternchen. Mein Lehrer hat nicht uns gelehrt, Zeiger und dennoch, so möchte ich es tun mit dem, was ich weiß.
Irgendwelche Ideen? :S
EDIT: Salvatore Antwort ist, nachdem ich meine Feste Prototyp:
void ReadFile(struct Items[10]);
- Es ist "richtiger code". Ich verwende es mit Visual studio 2010 und es funktioniert. :S
- "Visual Studio" und "es funktioniert" darf nicht verwendet werden, die in einem Satz in der höflichen Konversation. Man muss ausdrücklich sagen, wenn Sie sprechen über die spezifischen nicht-standard-Plattformen; andernfalls werden die Menschen davon ausgehen, sprechen Sie über die standard Sprache.
- Ok, ich fixe es. Hoffentlich ist das real genug >.<
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese in meinem compiler funktioniert gut.
Welchen compiler benutzt du? Welche Fehler hast du?
Daran, zu erklären, Ihre Struktur, bevor Sie Ihre Funktionen oder es wird nie funktionieren.
Definieren
struct Items
außerhalb von main. Bei der übergabe eines Arrays an eine Funktion in C, sollten Sie auch in der Länge des Arrays, da gibt es auch keine Möglichkeit die Funktion zu wissen, wie viele Elemente in diesem array (es sei denn, es ist garantiert ein festen Wert).Als Salvatore erwähnt, Sie haben auch zu erklären (nicht unbedingt definieren) alle Strukturen, Funktionen, etc. bevor Sie Sie verwenden können. Sie würden in der Regel haben Sie Ihre Strukturen und Funktionsprototypen in eine header-Datei in ein größeres Projekt.
Die unten ist eine funktionierende änderung Ihrer Beispiel:
Die Funktion wird nicht wissen, dass der Typ
struct Items
existiert, wenn Sie es erklären, nur lokal innerhalb dermain
Funktion Körper-Umfang. So definieren Sie die Struktur außen:Dies ist gefährlich, natürlich, da
ReadFile
hat keine Ahnung, wie groß das array (die arrays sind immer übergeben durch Karies-zu-Zeiger). So würden Sie in der Regel fügen Sie diese Informationen:ReadFile
- Funktion verwendet wird,... baby-Schritte, nicht wahr 🙂Haben Sie ziemlich viel Pointer für diese. Sie Funktion würde wie folgt Aussehen:
Müssen Sie verwenden Zeiger auf array, danach einfach Zugriff auf die Mitglieder
void ReadFile(Items * items);
funktionieren sollte.
Gut, wenn Sie übergeben eine Struktur wie Sie es Taten, es entsteht tatsächlich eine lokale Kopie in der Funktion. So wird es keine Wirkung haben auf Ihrer ursprünglichen Struktur, egal wie Sie es ändern in
ReadFile
.Ich bin nicht sicher, über einen anderen Ansatz und dies kann nicht die Antwort auf Ihre Frage, aber ich empfehle, Sie versuchen Zeigern. Sie werden auf jeden Fall mit Ihnen ziemlich viel in C/C++. Und Sie ist wirklich mächtig, sobald Sie Sie beherrschen
Haben Sie versucht, zu erklären Sie die Funktion wie folgt:
Hilfreich sein könnten:
http://www.daniweb.com/software-development/cpp/threads/105699
Statt Ihre Erklärung, erklären das so aus:
ist und die Funktion so:
Mit typedef definieren Sie eine neue Art, so brauchen Sie nicht zu verwenden, Wort "struct" jedes mal.
Warum gehst du nicht verwenden, übergeben Sie den Zeiger auf das array, um die Methoden, die es brauchen?
Wenn Sie wollen das gleiche struct array, dann sollten Sie verwenden Zeiger auf das array und nicht übergeben als array, da das erstellen einer Kopie.
void ReadFile(struct Items * items);
und wo Sie es nennen
Müssen vorsichtig sein mit dem Zeiger...