Pointer ausgeben

Gast #2643575
Hallo allerseits,

wie kann ich die Adresse eines Pointers ausgeben?
1
unsigned long long int Zahl = 0;
2

3

4
Zahl = &screen[0];
funktioniert aber gibt die Warnung "assignment makes integer from 
pointer without a cast"
1
Zahl = (unsigned long long int)&screen[0];
funktioniert auch, aber gibt die Warnung "cast from pointer to integer 
of different size
Gast #2643587
Stefan schrieb:
>> Zahl = (unsigned long long int)&screen[0];
> Wow , ein 64 Bit µC.
> Stefan
Die Bemerkung ist unsinnig und mit großer Wahrscheinlichkeit fehlerhaft, 
zumindest aber fehlerhaft hergeleitet.

Was ist denn screen für ein Typ? Und was genau willst du? Den Inhalt des 
ersten Elements? Den Speicher, auf den das erste Element zeigt? Die 
Adresse des ersten Elements?
Gast #2643593
Peter Zz schrieb:
> wie kann ich die Adresse eines Pointers ausgeben?

Genau so wie die Adresse von anderen Objekten. Was ich in deinem 
Beispiel vermisse sind allerdings die pointer selbst. Es mag auf deiner 
Plattform zufällig so sein, dass ein "unsigned long long int" dieselbe 
Grösse wie ein Pointer hat, aber es ist schlechter Stil und das casting 
verschlimmbessert die Situation noch.

Abhilfe: Definiere explizit einen Pointer auf deinen Datentypen, und 
weise dann die Adresse zu. Damit kannst du dann hantieren.
Gast #2643602
Guest schrieb:
> Was ist denn screen für ein Typ? Und was genau willst du? Den Inhalt des
> ersten Elements? Den Speicher, auf den das erste Element zeigt? Die
> Adresse des ersten Elements?

Ich hätte gerne die Adresse des ersten Elements.

unsigned char screen[408];
Mein µC ist der ATtiny84, der hat laut Datenblatt 512 Byte RAM.
1
    Zahl = (uintptr_t)&screen[0];//das erste Element
2
    LCD_Anzeige_Zahl(1,12,Zahl,8,0);
Gibt die (dezimal) Zahl 174 aus!
1
    Zahl = (uintptr_t)&screen[407];//das letzte Element
2
    LCD_Anzeige_Zahl(1,12,Zahl,8,0);
Gibt die (dezimal) Zahl 581 aus!
581 ist aber grösser als 511,
trotzdem funktionieren meine LCD_Grafik-Routinen einwandfrei...
Gast #2643644
Mark Brandis schrieb:
> braucht Du natürlich einen Pointer auf unsigned char:
>
> unsigned char* my_pointer = &screen[0]; // my_pointer zeigt auf das 1. Element 
von screen

Ne, ja is klar,
1
  unsigned char* DPTR;

Die Frage war, wie mach ich aus dem Pointer wieder ne Zahl,
dies ist (teils) geklärt:
1
    Zahl = (uintptr_t)DPTR;
Dazu aber noch ein paar Fragen:
1. In welcher Datei wird  "uintptr_t" definiert?
2. Warum liegt mein Bildschirmspeicher nicht im Bereich von 0...511?

Ich habe mal einen Screenshoot von meinem LCD-Display gepostet.
Der untere Teil des LCD-Display's wird nach links gescrollt.
Deshalb ist das Bild da verwischt.
Angehängte Dateien:
#2643676
Peter Zz schrieb:
>Die Frage war, wie mach ich aus dem Pointer wieder ne Zahl,
>dies ist (teils) geklärt:

>    Zahl = (uintptr_t)DPTR;

Wozu denn der Cast?

Du hast einen Pointer, der auf eine Zahl zeigt, die Werte zwischen 0 und 
255 annehmen kann. Also dereferenzierst Du den Pointer mit dem * 
Operator.
Einen unsigned char Wert kann man problemlos jeder "größeren" Variablen 
zuweisen (wie unsigned int etc.)
Gast #2643677
Danke erstmal   :-)

Mein Wissen über die Programmiersprache "C" gleich einem Schweizerkäse 
(Tilsiter oder Emmentaler?), alles voller Löcher.
Ein bis zwei dieser Löcher sind jetzt gerade gestopft worden ;-)
Gast #2643710
A. K. schrieb:
> Jo, und morgen kommt er mit einer Frage, bei der sich herausstellt, dass
> er 345 Warnungen in den Wind schlug. Wieso? "Ja, hab ich hier so
> gelernt, dass man die ignorieren kann". Eine davon aber nicht.

und so schreibt er überall ein cast hin, weil er weiss das damit die 
Warnungen verschwinden - ist natürlich viel besser.
#2643711
Peter II schrieb:

> und so schreibt er überall ein cast hin, weil er weiss das damit die
> Warnungen verschwinden - ist natürlich viel besser.

Jep. Weil die eine wichtige dann nicht in 344 unwichtigen untergeht.

Klar, der Stein der Weisen ist das auch nicht. Denken muss er schon 
noch. Aber nur einmal, nicht bei jedem Compilerlauf.
Gast #2643730
A. K. schrieb:
> Peter II schrieb:
>
>> maximal kommt noch eine warnung (die aber ok ist)
>
> Autsch!
>
Sieh's mal so, mit der Warnung weiß er zumindest, dass er da noch 
Debugging output stehen hat, der wieder raus muss.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.