FEHLER unsigned char defused(unsigned int*_last_ids[0])

Gast #1591964
Lesenswert?

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!
Gast #1592014
Lesenswert?

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?
#1592033
Lesenswert?

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.
Gast #1592051
Lesenswert?

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=
#1592068
Lesenswert?

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.
#1592071
Lesenswert?

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"

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren