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,
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
intFunc(char*buf)
2
{
3
intsuccess;
4
5
buf[index].....
6
7
returnsuccess;
8
}
9
10
voidmain()
11
{
12
charbuf[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
intFunc1(char*buf)
2
{
3
...
4
}
5
6
intFunc(char*buf)
7
{
8
intsuccess;
9
10
buf[index].....
11
12
Func1(buf);
13
14
returnsuccess;
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.
>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
intFunc1(charbuf[128])
2
{
3
...
4
...sizeof(buf);
5
}
6
7
intFunc(charbuf[128])
8
{
9
intsuccess;
10
11
buf[index].....
12
13
...sizeof(buf);
14
15
Func1(buf);
16
17
returnsuccess;
18
}
19
20
main{
21
charbuf[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 .