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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.