Forum: PC-Programmierung Geht nicht als C++ wie foo schreiben?


von Shadow233 (Gast)


Lesenswert?

Wie muss ich die Funktion foo anpassen damit
a=foo;
unter C und C++ funktioniert?
ne Funktion mit "returning pointer to array 5 of char"
1
#include <stdio.h>
2
3
typedef char (* (*WTF)() )[5];
4
5
char* foo ()
6
{
7
8
}
9
10
int main ()
11
{
12
  WTF a;
13
  a = foo; // compiliert als c aber nicht als c++
14
}


Diesen Compiler benutzt:
https://www.onlinegdb.com/online_c_compiler

C++ compile:
error: invalid conversion
from
‘char* (*)()’
to
‘WTF {aka char (* (*)())[5]}’
[-fpermissive]


https://cdecl.org/
C gibberish ↔ English
char(*(*WTF)())[5];
declare WTF as pointer to function RETURNING POINTER TO ARRAY 5 OF CHAR

von Yalu X. (yalu) (Moderator)


Lesenswert?

1
char (*foo())[5]
2
{
3
  ...
4
}

Edit:

In C solltest du für die Funktion noch die Argumentliste angeben (bzw.
void für eine leere Argumentliste):

1
typedef char (*(*WTF)(void))[5];
2
3
char (*foo(void))[5]
4
{
5
  ...
6
}

Sonst entfällt beim Aufruf der Funktion die Typprüfung. In C++ reicht
für die leere Argumentliste das leere Klammerpaar.

: Bearbeitet durch Moderator
von Rolf M. (rmagnus)


Lesenswert?

Shadow233 schrieb:
> Wie muss ich die Funktion foo anpassen damit
> a=foo;
> unter C und C++ funktioniert?
> ne Funktion mit "returning pointer to array 5 of char"
> #include <stdio.h>
>
> typedef char (* (*WTF)() )[5];
>
> char* foo ()

Wo is die 5 hier? foo() liefert einen Zeiger auf einen char zurück, 
keinen Zeiger auf ein array[5] aus char. Das ist es, was die 
Fehlermeldung dir sagen will.

: Bearbeitet durch User
von Shadow233 (Gast)


Lesenswert?

Ah, so funktioniert es, vielen Dank.
Ich bin immer in der Denke dass man arrays nur als zerfallene Pointer 
zurückgeben kann.

von Dirk B. (dirkb2)


Lesenswert?

Shadow233 schrieb:
> Ah, so funktioniert es, vielen Dank.
> Ich bin immer in der Denke dass man arrays nur als zerfallene Pointer
> zurückgeben kann.

Schon, aber der Typ vom Pointer ist wichtig

Denn Unterschied merkt man wenn man Pointerarithmetik macht.

ein char-Pointer ist etwas anderes als ein Pointer auf Array 5 von char.

char feld[6][5];

da hast du als verschiedene mögliche Zeigertypen:

feld Zeiger auf Array 5 von char
feld[0] Zeiger auf char
&feld Zeiger auf Array 6 von Array 5 von char

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
Noch kein Account? Hier anmelden.