Hallo, ich hab da ein Problem mit der C++ - Syntax.
int values[2][2];
??? GetZeiger(int i) { return values + i; }
Der Rückgabetyp von GetZeiger() müsste Zeiger auf int[2] sein. Ich weiss aber nicht, wie ich das Schreiben soll.
Vielen Dank im Voraus.
Gert
int* GetZeiger(int i)…
Da ein Pointer auf Array nur die 1. Array stelle angibt. Ist also int* für alle int arrays ein pointer. Will man dann auf ein bestimmten Arrya zugreifen wird das mit intpointer[arrayelementNr].
Also nur den Typ als Pointer (int*), da der Pointer nicht beschreibt wie gross das Array ist, sondern nur die Anfangsposition des 1 Elements.
Hoffe du kannst damit was anfangen.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
ich hab da ein Problem mit der C++ - Syntax.
int values[2][2];
??? GetZeiger(int i) { return values + i; }
Der Rückgabetyp von GetZeiger() müsste Zeiger auf int[2] sein.
Ich hab mal ein Beispiel draus gebastelt,
durcharbeiten musst Du Dich selber 
int values[2][2] = {
{ 1, 2 },
{ 3, 4 } };
int (\* GetZeiger(int i) )[2]
{
return values + i;
}
int main( void )
{
int (\*zg)[2];
int k = 0;
zg = GetZeiger(k);
printf("%k =\> { %d, %d }\n",(\*zg)[0], (\*zg)[1] );
k = 1;
zg = GetZeiger(k);
printf("%k =\> { %d, %d }\n",(\*zg)[0], (\*zg)[1] );
return 0;
}
Grüße
CMБ
Ist das erlaubt ?
Hallo CMБ
ich denke mal, dass es erlaubt ist, aber gesehen habe ich dass noch nie. Gibts dafür in C eine „Erlaubnis“ oder eine Allgemeinregel, oder sogar ein Anwendung?
int (* GetZeiger(int i) )[2];
Gruß
achim
Hallo Semjon, vielen Dank.
Funktioniert (zumindest ist der Compiler damit zufrieden).
Sieht auf den 1. Blick komisch aus, ist aber nach einigem Nachdenken doch recht logisch.
int values[2][2];
int (*GetZeiger(int i))[2] { return values + i; } !!!
mit vielen Grüßen
Gert
ja
Hallo Achim, ja es ist erlaubt.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
vielen Dank für Deine Mühe, aber die Lösung : siehe oben.
mfg
int* GetZeiger(int i)…
Da ein Pointer auf Array nur die 1. Array stelle angibt. Ist
also int* für alle int arrays ein pointer. Will man dann auf
ein bestimmten Arrya zugreifen wird das mit
intpointer[arrayelementNr].
Also nur den Typ als Pointer (int*), da der Pointer nicht
beschreibt wie gross das Array ist, sondern nur die
Anfangsposition des 1 Elements.
Hoffe du kannst damit was anfangen.
Hallo Achim
ich denke mal, dass es erlaubt ist, aber gesehen habe ich dass
noch nie. Gibts dafür in C eine „Erlaubnis“ oder eine
Allgemeinregel, oder sogar ein Anwendung?
int (* GetZeiger(int i) )[2];
Das Problem des C-Designs ist hier iirc, dass
man die Array-Designation [2] nicht direkt
hinter den Datentyp schreiben kann:
int\*[2] GetZeiger(int i);
- denn dann würde auch die Klammerung
unnötig werden, die [] klebt ja nach links.
In Java z.B. wurde das dann letzlich behoben.
Daher sieht man die „unschöne“, weil nicht den
C-Sehgewohnheiten konforme, Konstruktion
type ( \*func(type para) ) [N]
wirklich nicht so oft.
Man würde ja hier die Sache vereinfachen, in dem man,
wie Du weisst, einen Typ für die wesentliche
Komponente „int [2]“ definiert:
typedef int INT2[2];
INT2 values [2] = {
{ 1, 2 },
{ 3, 4 }
};
INT2\* GetZeiger(int i)
{
return values + i;
}
int main( void )
{
INT2 \*zg;
...
Grüße
CMБ
1 „Gefällt mir“