Adreßtypen in C++ (Adreßtypen in C++), Lektion, Seite 723210
https://www.purl.org/stefan_ram/pub/adresstypen_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C++-Kurs

Adreßtypen in C++ 

Adreßtypen

Eine Variable »W « mit dem Typ der Adresse einer Variablen »V « kann erhalten werden, indem »( *W  )« an der Stelle von »V « in die Deklaration der Variablen »V « eingesetzt wird.

(Im voranstehenden Satze stehen »W « und »V « für die jeweiligen Namen zweier Variablen.)

Ist beispielsweise »int v;« die Deklaration einer Variablen »v«, so erhält man durch Ersetzung von »v« durch »( *w )« die neue Deklaration »int ( *w );«. Diese deklariert »w« nun so, daß es den richtigen Typ hat, um die Adresse »&v« aufzunehmen.

In dem folgenden Programm wird auf diese Weise eine Variablen »w« deklariert, so daß ihr Typ den Typ von »&v« hat.

Dieser Variablen »w« wird dann mit der Adresse der Variablen »v« initialisiert. Danach kann dann später mit »( *w )« wieder das Objekt zu der Adresse »w« erhalten werden. »( *w )« bedeutet also soviel wie »v«. In dem Programm wird der Wert dieses Objekt dann beispielsweise zur Initialisierung der Variablen »u« verwendet.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()
{ int v { 31 };
int ( *w ) { &v };
int u { ( *w ) };
::std::cout << u << "\n"s; }

Protokoll
31
::std::cout
31

Die Bedeutung von »int( *w );« ergibt sich einfach daraus, daß der Ausdruck »( *w )« den Typ »int« haben soll, also: »int ( *w );«.

Wenn die Klammern nicht nötig sind, um zu verdeutlichen, daß »*w« eine Einheit bilden soll, können sie entfallen. Dies ist beispielsweise in dem folgenden Fall möglich, wo »*p« verwendet wird. Dort ist es nicht nötig, »( *p )« zu verwenden.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()
{ int i { 2 };
int *p { &i };
int k { *p };
::std::cout << k << "\n"s; }

Protokoll
2

Man hier »int *p« also so lesen, daß »*p« den Typ »int« hat oder so daß »p« den Typ »int *« hat.

Der Typ einer Adresse wird auch ein Adreßtyp (address type) genannt.

»auto«

Es ist auch möglich, den Typ einer Adresse durch »auto« automatisch festlegen zu lassen.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()
{ auto i { 4 };
auto p { &i };
::std::cout << *p << "\n"s; }

Protokoll
4

Im voranstehenden Programm erhält die Variable »p« automatisch den Typ des Ausdrucks »&i«, also »int *«.

»auto *«

Bei Verwendung von »auto *« wird für »auto« automatisch der richtige Typ eingesetzt, in dem folgenden Beispiel »int«. Der Stern im Quelltext verdeutlicht, daß es sich um eine Adresse handelt.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()
{ auto i { 4 };
auto * p { &i };
::std::cout << *p << "\n"s; }

Protokoll
4

Auch im voranstehenden Programm erhält die Variable »p« wieder automatisch den Typ des Ausdrucks »&i«, also »int *«.

Skalare Typen

Die arithmetischen Typen (wie »int« und »double«) werden mit den Adreßtypen (wie »int *«) zusammengefaßt als skalare Typen bezeichnet.

C++ 2015 3.0p9
Arithmetic types  [and] (…) pointer types (…) are collectively called scalar types.

Übungsfragen

?   Übungsfrage

Ist das folgende Programm korrekt?

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main()
{ int i = 2;
int *p = &i;
*p = &i;
::std::cout << *p << "\n"s; }

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723210 stefan_ram:723210 Adreßtypen in C++ Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723210, slrprddef723210, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/adresstypen_c++