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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von MrC (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Meinst du sowas?

typedef int SInt16_t;
typedef SInt16_t* SInt16Ptr_t;

von 🐧 DPA 🐧 (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.