Adressen und Zahlen in C (Adressen und Zahlen in C), Lektion, Seite 724382
https://www.purl.org/stefan_ram/pub/adressen_und_zahlen_c (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C-Kurs

Adressen und Zahlen in C 

Wandlungen einer Adresse in eine Zahl

Eine Adresse kann grundsätzlich in eine Zahl gewandelt werden. Das Ergebnis der Wandlung ist implementationsdefiniert. Falls der Zieltyp das Ergebnis nicht darstellen kann, hat die Wandlung jedoch undefiniertes Verhalten. Es ist nicht  gesagt, daß es für jeden Adreßtyp überhaupt irgendeinen Zahlentyp gibt, der seine Werte darstellen kann.

N2310, 6.3.2.3p6
Any pointer type may be converted to an integer type. Except as previously specified, the result is implementation-defined. If the result cannot be represented in the integer type, the behavior is undefined. The result need not be in the range of values of any integer type.

Damit verbietet sich solch eine Wandlung in portablem Code.

»uintptr_t« und »intptr_t«

Es ist jedoch erlaubt, eine void-Adresse in einen Wert des vorzeichenlosen Zahlentyps »uintptr_t« oder des vorzeichenbehafteten Zahlentyps »intptr_t« zu wandeln. Die Rückwandlung der erhaltenen Zahlen in eine void-Adresse ergibt dann wieder die ursprünglich Adresse.

Die beide Typen »uintptr_t« und »intptr_t« müssen jedoch nicht  von jeder C -Implementation implementiert werden. Damit kann man sich in portablem Code auch nicht  darauf verlassen, daß sie verfügbar sind.

Siehe auch
N2310, 7.20.1.4p1

Wandlungen einer Zahl in eine Adresse

Eine Zahl kann grundsätzlich in eine Adresse gewandelt werden. Das Ergebnis ist (außer bei der Nulladreßkonstanten »0«) jedoch implementationsdefiniert. Es kann sein, daß die erhaltene Adresse nicht  verwendbar ist.

N2310, 6.3.2.3p5
An integer may be converted to any pointer type. Except as previously specified, the result is implementation-defined, might not be correctly aligned, might not point to an entity of the referenced type, and might be a trap representation.

Damit verbietet sich solch eine Wandlung in portablem Code.

»uintptr_t« und »intptr_t«

Selbst die Typen »uintptr_t« und »intptr_t« erlauben es im allgemeinen nicht, eine beliebige Zahl in eine Adresse zu verwandeln, der dann verwendet werden darf.

Anwendbarkeit von Wandlungen zwischen Zahlen und Adressen

Wandlungen zwischen Adressen und Zahlen sind bei einzelnen C -Implementationen möglich.

Bei speziellen C -Implementationen für Microcontroller kann man beispielsweise durch Auswertung des folgenden Ausdrucks den Wert «7» in den Speicher bei der Adresse «4096» schreiben.

Ausdruck
*( int * )4096 = 7
Literaturhinweis
Programming Microcontrollers in C Ted Van Sickle  (2001), Kapitel 3 „Pointers “, Abschnitt „Pointers and Multidimensional Arrays “ (in der zweiten Auflage von 2001)

In maximal portablem  Code sind solche Wandlungen aber nicht  möglich.

 

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 stefanram724382 stefan_ram:724382 Adressen und Zahlen in C Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724382, slrprddef724382, 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/adressen_und_zahlen_c