PIC HITECH C: ungültige Dimension lässt sich also nicht kompilieren unsigned char defused(unsigned int*_last_ids[0]) { //fkt. durchsucht alle 4 Elemente von ....[4] also eindim. array } (als Test: DevC++ als C-Konsolenanwendung wird einwandfrei kompiliert) muss ich je nach Kompiler den Parameter anders gestalten? Vllt ausweichen auf ein global angelegtes array um die Pointergeschichte wegzumachen? bin Ratlos!
Du definierst als Übergabe einen Pointer auf ein Array der Größe 0. Das ist sinnlos. Formuliere mal aus, was Du übergeben bekommen willst.
ich will der fkt. ein komplettes array zur verfügung geben irgendwie kann ich mich an den füheren info-unterricht erinnern, dass ein pointer auf die "nullte stelle" ausreicht, um auf das komplette array zugreifen zu könnne. Abhilfe habe ich nun durch bit defused (unsignet int*_last_ids[4]) bekommen. Ist ja auch klar, hier muss ich wohl einen lokalen pointer auf ein array der größe geben, die ich der fkt. auch übermittel. wie kann ich jedoch die fkt. für verschieden große arrays funktionsfähig machen? ich könnte das größte array als maß zur erzeugung der fkt. angeben. ABER: ich weiß vorher nicht, wie gr. die arrays werden, weil sie vllt. dyn. erzeugt werden... und NUN?
Timo P schrieb: > irgendwie kann ich mich an den füheren info-unterricht erinnern, dass > ein pointer auf die "nullte stelle" ausreicht, um auf das komplette > array zugreifen zu könnne. Abhilfe habe ich nun durch bit defused > (unsignet int*_last_ids[4]) bekommen. Deine Erinnerungen sind etwas verworren. In C wird ein Array grundsätzlich dadurch übergeben, dass die Adresse des ersten Array elements übergeben wird. Die Funktion muss also diese Adresse in einem Pointer auffangen
1 | unsigned char defused( unsigned int* _last_ids ) |
2 | {
|
3 | arbeite mit last_ids[0] |
4 | arbeite mit last_ids[1] |
5 | |
6 | ...
|
7 | }
|
8 | |
9 | |
10 | int foo() |
11 | {
|
12 | unsigned int Array[5]; |
13 | |
14 | defused( Array ); |
15 | }
|
> ABER: ich weiß vorher nicht, wie gr. die arrays werden, weil sie vllt. > dyn. erzeugt werden... und NUN? Dann must du dir bei der Erzeugung merken, wie groß du sie erzeugt hast und diese Information mit an die Funktion übergeben.
ist ja bei dieser lösung nicht so schlimm Karl heinz Buchegger schrieb: > Dann must du dir bei der Erzeugung merken, wie groß du sie erzeugt hast > und diese Information mit an die Funktion übergeben. ist ja nicht so schlimm bei dieser lösung! Danke für die Aufklärung. Also nehm ich nen "einfachen pointer" auf die 0te stelle. so kann ich innerh. der fkt. sizeof(_last_ids) nutzen richitg=
Timo P schrieb:
> so kann ich innerh. der fkt. sizeof(_last_ids) nutzen richitg=
Nein, kannst du nicht. Sizeof liefert dir die Größe des Pointers, nicht
die Größe des Arrays.
Du musst die Größe auf irgendeine Art mit in die Funktion geben. Z.B.
als zusätzlichen Parameter, oder indem du das Array terminierst.
In C gibt es keinen Arrays! Das ist alles nur etwas syntax sugar für Pointerarithmetik. Daher kann muss man auch immer die Größe des "Arrays" separat übergeben. Wenn du in der Funktion nun nen sizeof(_last_ids) machst, erhältst du nicht die Größe des "Arrays", sondern die Größe eines Pointers auf deinen Prozessor. Das wurde hier schon mal diskutiert: Beitrag "Anzahl der Arrayelemente in einer Funktion ermitteln"
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.