Forum: PC-Programmierung C/C++: Pointer - Typedefs


von MrC (Gast)


Lesenswert?

Hallo Zusammen,

ich stehe gerade ein wenig auf dem Schlauch und bräuchte mal einen Tipp.

Und zwar habe ich den folgenden Funktions-Prototypen:
1
static void Foo(const SInt16 **bar);

Jetzt möchte ich statt dem const pointer Zeugs ein typedef nutzen. 
Klappt auch alles wunderbar in C/C++:
1
typedef SInt16 const **Tbar;
2
3
static void foo(Tbar bar);

Allerdings brauche ich da das Typedef Tbar jetzt verschachtelt weil das 
Tool (Enterprise-Architekt) mit dem ich das modelliere und zum 
generieren des Codes benutzt wird leider auf so komplexe dinge wie 
Doppel-Pointer und dann auch noch const nicht klar kommt.

Nur da stehe ich irgendwie auf dem Schlauch, hab schon so Sachen wie
1
typedef SInt16 *SInt16Ptr;
2
typedef SInt16Ptr const *Tbar;

ausprobiert, aber da wirft der Compiler Fehlermeldungen...

Ich will das erstmal in C/C++ verstehen um dann herausfinden zu können 
wie ich es modellieren muss.

Grüße

MrC

von Nick M. (Gast)


Lesenswert?

Meinst du sowas?

typedef int SInt16_t;
typedef SInt16_t* SInt16Ptr_t;

von 🐧 DPA 🐧 (Gast)


Lesenswert?

MrC schrieb:
> typedef SInt16 *SInt16Ptr;
> typedef SInt16Ptr const *Tbar;

"const SInt16 **" ist ja das selbe wie "SInt16 const **"; Das Const 
bezieht sich auf die SInt16 Daten. "SInt16Ptr const *" und "const 
SInt16Ptr *" sind auch jeweils das gleiche, aber das Const bezieht sich 
hier auf SInt16Ptr, also den Pointer, nicht auf die Daten, auf den 
dieser zeigt. Das ist effektiv ein "SInt16 *const *", und kein "SInt16 
const **"

von MrC (Gast)


Lesenswert?

Nick M. schrieb:
> Meinst du sowas?
>
> typedef int SInt16_t;
> typedef SInt16_t* SInt16Ptr_t;

Sowas in der Art, aber wenn dan eher:
1
typedef SInt16 *SInt16Ptr;
2
typedef SInt16Ptr *SInt16DblPtr;
3
typedef SInt16DblPtr const *Tbar;

Aber das scheint nicht das gleich zu sein wie:

1
const SInt16 **

von Rolf M. (rmagnus)


Lesenswert?

MrC schrieb:
> Sowas in der Art, aber wenn dan eher:
> typedef SInt16 *SInt16Ptr;
> typedef SInt16Ptr *SInt16DblPtr;
> typedef SInt16DblPtr const *Tbar;
>
> Aber das scheint nicht das gleich zu sein wie:
>
> const SInt16 **

Natürlich nicht. Erstens ist Tbar ein dreifach-Pointer, und zweitens 
bezieht sich das const auf das falsche Element. Eher so:
1
typedef SInt16 const * Sint16Ptr;
2
typedef Sint16Ptr * Tbar;

von MrC (Gast)


Lesenswert?

Rolf M. schrieb:
> Erstens ist Tbar ein dreifach-Pointer

Hab mich vertippert. Meinte:
1
typedef SInt16 *SInt16Ptr;
2
typedef SInt16Ptr *SInt16DblPtr;
3
typedef SInt16DblPtr const Tbar;

von MrC (Gast)


Lesenswert?

Rolf M. (rmagnus). Aber so wie du es oben beschrieben hast funktioniert 
es. Danke!!

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.