C/C++: Pointer - Typedefs

Gast #6522494
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
Gast #6522505
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 **"
Gast #6522508
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 **
#6522512
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;

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