# vektorzeiger an funktion übergeben



## kurcob (28. Dezember 2006)

Hallo,

weiß jemand wie man einen 2 Dimensionalen Vektor an eine funktion übergibt?

```
void funktion( ?){ // als Zeiger, das auf dem original gearbietet wird, call by reference
...
}
int vektor[3][3]={0};
funktion(?);
```


----------



## Matthias Reitinger (28. Dezember 2006)

Hallo,


```
void funktion(int vek[3][3]) {
    vek[0][0] = 42;
}

int main()
{
    int vektor[3][3] = {0};
    funktion(vektor);

    return 0;
}
```

Grüße,
Matthias


----------



## kurcob (28. Dezember 2006)

wobei das jetzt kein zeiger ist!?

wenn ich es als zeiger im funktionskopf deklariere kommt ein warning:

Anzahl der Dereferenzierungen bei 'int (*)[9]' und 'int' unterschiedlich
Unterschiedliche Typen für formalen und übergebenen Parameter 1


----------



## kle-ben (28. Dezember 2006)

Hi,

ein Feld ist immer ein Zeiger !

Du könntest statt dessen auch 

```
void funktion(int** vek)
```

schreiben.

Wenn du also noch einen Zeiger vor dein Feld setzt
müsstest du also so drauf zugreifen:

```
( *vek )[0][0] = 13;
```

Benny


----------



## kurcob (28. Dezember 2006)

aber ist es dann auch ein zeiger wenn ich 

```
void funktion(int vek[][9]){
...
}
```
 schreibe?

schreibt es mir dann in mein original?


----------



## kle-ben (28. Dezember 2006)

```
int vek[][9]
```
ist das selbe wie



> int* vek[9]


also ein Zeiger auf ein 9 Felder langes Integerarray.

Das ist aber nicht gleich einem 


```
int vek[3][3]
```


----------



## kurcob (28. Dezember 2006)

und wie sieht es für ein 2 dimensionales aus?


----------



## Matthias Reitinger (28. Dezember 2006)

Hallo,



kle-ben hat gesagt.:


> ```
> int vek[][9]
> ```
> ist das selbe wie
> ...


Nein, das ist nicht dasselbe. Ersteres ist ein zweidimensionales Array von Ganzzahlen, letzteres ein Array von Zeigern auf Ganzzahlen.

Insbesondere ist auch int ary[3] nicht gleichzusetzen mit int *ary! Arrays und Zeiger sind zwei verschiedene Paar Schuhe, auch wenn sie sich oft ziemlich ähneln. Siehe dazu auch Kapitel 6 der FAQ von comp.lang.c.

Grüße,
Matthias


----------



## kle-ben (28. Dezember 2006)

hm, stümmt sry :-(.
Ich besorg mir meine Felder immer mit new... da funktionierts 

Wie Mathias schon sagt:


> ```
> void funktion(int vek[3][3]) {
> vek[0][0] = 42;
> }
> ```


Intern wird dieses Feld mit Zeigern gehandelt.
Nach dem Aufruf der Funktion steht also an der 
stelle [0][0] eine 42 


Benny


----------

