Hallo, ich möchte gern ein Array, das aus einer Queue gespeist wird an eine andere Funktion in einer anderen c Datei übergeben, wie muss ich dies anstellen? Denn das Array wird in der anderen Funktion gebraucht um verarbeitet zu werden. Gruß paule
Hallo bei einem 2*2 Array vielleicht noch machbar. Aber bei 1000*898 Array nicht mehr so praktikabel. Übergib einen Zeiger auf das Array. Gruß Joachim
Hallo, hm blöderweise hab ich in dieser Datei eine Funktion, die ein array erwartet. Dort wird ein Protokoll zusammengesetzt und das funktioniert auch schon ganz gut. Diese Funktion verwendet schon einen Zeiger. Wenn ich dann an diese Funktion noch einen Zeiger übergebe, dann funktioniert das wohl nicht mehr ohne weiteres?
XXX schrieb: > bei einem 2*2 Array vielleicht noch machbar. > Aber bei 1000*898 Array nicht mehr so praktikabel. > > Übergib einen Zeiger auf das Array. Man kann keine Arrays an Funktionen übergeben. paule schrieb: > Wenn ich dann an diese Funktion noch einen Zeiger übergebe, dann > funktioniert das wohl nicht mehr ohne weiteres? Warum sollte man an eine Funktion nicht mehrere Zeiger übergeben können?
Zeig am besten mal die Deklaration des Arrays und die der Funktion, die den Unhalt des Arrays verarbeiten soll. Unter "ein Array übergeben" verstehen wir hier, dass das Array als Ganzes übergeben wird. Dazu ist normalerweise der Stack zu schade oder sogar zu klein und in C geht das überhaupt nicht. Daher werden Zeiger übergeben wie hier auch schon geraten. Deine Einrede bzw. Frage: >Diese Funktion verwendet schon einen Zeiger. >Wenn ich dann an diese Funktion noch einen Zeiger übergebe, dann >funktioniert das wohl nicht mehr ohne weiteres? ist an sich irrelevant und ausserdem missverständlich. Es ist unklar, ob Du davon ausgehst, das die Parameterliste nur einen Zeiger enthalten darf. Das ist nicht der Fall; es können beliebig viele Zeiger übergeben werden. Oder es ist unklar, ob Du mit "noch einem Zeiger" evtl. effektiv einen Zeiger auf einen Zeiger auf das Array erzeugst, bzw. zu erzeugen glaubst. An sich ist das kein Problem, nur ist es wahrscheinlich garnicht nötig.
Guru schrieb: > Das ist nicht der Fall; es können beliebig viele > Zeiger übergeben werden. LOL, du kannst sogar einen zeiger auf ein array übergeben, welches zeiger auf deine arrays beinhaltet :-) **duckUndWeg**
1 | int Func(char *buf) |
2 | {
|
3 | int success; |
4 | |
5 | buf[index]..... |
6 | |
7 | return success; |
8 | }
|
9 | |
10 | void main() |
11 | {
|
12 | char buf[512]; |
13 | |
14 | Func(buf); |
15 | }
|
hoffe, ich hab mich jetzt auf die schnelle nicht vertippert :-)
Hallo, Random ... schrieb: > Guru schrieb: >> Das ist nicht der Fall; es können beliebig viele >> Zeiger übergeben werden. > > LOL, du kannst sogar einen zeiger auf ein array übergeben, welches > zeiger auf deine arrays beinhaltet :-) > > **duckUndWeg** > int Func(char *buf) > { > int success; > > buf[index]..... > > return success; > } > > void main() > { > char buf[512]; > > Func(buf); > } > > hoffe, ich hab mich jetzt auf die schnelle nicht vertippert :-) okay, ich habe das auch soweit main und dann zeiger übergeben an Func. Aber die Funktion Func soll jetzt eine neue Funktion Func1 aufrufen bei der, wieder ein Zeiger auf den Buffer übergeben wird, damit ich buf[index] kann. Wie sieht dann der Prototyp aus und wie muss ich dann Func1 aufrufen. Ich hoffe das war etwas verständlicher ;) Gruß paule
>Aber die Funktion Func soll jetzt eine neue Funktion Func1 aufrufen bei >der, wieder ein Zeiger auf den Buffer übergeben wird, damit ich >buf[index] kann. >Wie sieht dann der Prototyp aus und wie muss ich dann Func1 aufrufen. Du kannst den Zeiger gerade so übergeben, wie Du ihn an Func übergeben hast. Welcher Satz oder Absatz, in dem C Buch das Du liest, lässt Dich glauben, dass es anders ist?
1 | int Func1 (char * buf) |
2 | {
|
3 | ...
|
4 | }
|
5 | |
6 | int Func (char * buf) |
7 | {
|
8 | int success; |
9 | |
10 | buf[index]..... |
11 | |
12 | Func1 (buf); |
13 | |
14 | return success; |
15 | }
|
In Func ist buf ein char *. Übergibst Du buf dann erwartet die aufgerufene Funktion wieder ein char *.
Ich habs auch so versucht, nur irgendwie wird die Größe des Array falsch übergeben, deswegen dachte ich es liegt an der falschen deklaration. Das mit den Zeigern ist mir immer noch ein wenig suspekt, da muss ich mich noch mehr einlesen und ausprobieren. Als Literatur verwende ich "Die Programmiersprache C. Ein Nachschlagewerk" der Universität Hannover.
Sry für den Doppelpost, aber kann es sein das mir der sizeof Befehl dann nicht die richtige Länge zurückgibt, wenn ich diesen in Func anwende auf buf?
>Ich habs auch so versucht, nur irgendwie wird die Größe des Array falsch >übergeben Nein, die Grösse wird so überhaupt nicht übergeben. (Das hättest Du bitte früher schreiben sollen, das das eine Nebenbedingung ist). Ist aber auch kein Problem. Du kannst die Grösse mit übergeben.
1 | int Func1 (char buf [128]) |
2 | {
|
3 | ...
|
4 | ... sizeof (buf); |
5 | }
|
6 | |
7 | int Func (char buf [128]) |
8 | {
|
9 | int success; |
10 | |
11 | buf[index]..... |
12 | |
13 | ... sizeof (buf); |
14 | |
15 | Func1 (buf); |
16 | |
17 | return success; |
18 | }
|
19 | |
20 | main { |
21 | char buf[128]; |
22 | |
23 | Func (buf); |
24 | }
|
Damit Du nur an einer Stelle die Buffergrösse ändern musst bzw. gegen Tipfehler gefeit bist, empfiehlt es sich ein typedef zu verwenden.
>kann es sein das mir der sizeof Befehl dann nicht die richtige Länge >zurückgibt, wenn ich diesen in Func anwende auf buf? Ja. Genau. Wenn Du die Form Func (char * buf) verwendest, ist die Grösseninformation in der Funktion nicht mehr vorhanden. Wenn Du dagegen die Form Func (char buf [128]) verwendest kann sizeof auch innerhalb der Funktion die Grösse zurückgeben.
Kleine Anmerkung noch zu Deiner sizeof Frage. Es ist ein Irrtum anzunehmen, das sizeof innerhalb einer mit Func (char * buf) deklarierten Funktion die Grösse "falsch" zurückgibt. Es gibt die Grösse durchaus richtig an. Aber, im Gegensatz zu Deiner Erwartung, gibt sizeof(buf) die Grösse des Zeigers zurück und nicht die ohnehin nicht mehr bekannte deklarierte Grösse des Arrays.
Ja okay, da liegt also das Problem. Oder ich übergebe die Größe direkt von der main aus, als Variable? Denn die Größe des Arrays ist Variable und kann bis 255 betragen.
>Oder ich übergebe die Größe direkt von der main aus, als Variable? >Denn die Größe des Arrays ist Variable und kann bis 255 betragen. Hm. Das musst ja Du entscheiden, ob Du das willst und ob das notwendig ist. Falls ja, dann nehme ich an, dass Du mit (m)alloc/free arbeitest. Kannst Du machen, ist aber wieder ein ganz anderer Fall. (Hättest Du auch wieder von Anfang an schreiben sollen, du Dackel ;-) ) Ja. Dann übergib die Grösse des Arrays als gesonderte Variable. Kein Problem.
>Ja. Dann übergib die Grösse des Arrays als gesonderte Variable. Kein >Problem. Das ist nicht korrekt. Es muss heissen: Ja. Dann übergib die Grösse des Arrays als gesonderten Parameter .
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.