PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Zeigern


Gast
2010-04-11, 11:21:58
Tach,

ich möchte Bilddaten speichern und benutze dazu einen Zeiger:

unsigned char *BildDaten;

Der Datentyp unsigned char ist ja gleichbedeutend mit BYTE.
Der Zeiger zeigt ja im Prinzip auf das erste Element des "Arrays" BildDaten. Wenn ich mir ein Byte-Array vorstelle, kann das ja die Länge [0...255] haben.

Wie groß kann das Bild maximal sein, damit es noch in den Zeiger passt ? Ansich sollte ja nach 256 Byte Schluss sein, oder ? Wieso bekommen ich dann Bilder gespeichert, die ~8 Kilobyte groß sind ?
Irgendwas kapier ich das grundlegend nicht :D

Markus89
2010-04-11, 11:30:13
Der Zeiger ist nicht nur ein Byte groß, sondern 4 oder 8 Byte. unsigned char gibt nur den Datentyp an, der an der Speicherstelle stehen sollte.

Außerdem sagt der Zeiger nichts darüber aus, auf wieviel Speicher er zeigt. Wie du schon gesagt hast zeigt er eben nur auch den Anfang deines Speicherblocks.

Gast
2010-04-11, 11:37:37
Der Zeiger ist nicht nur ein Byte groß, sondern 4 oder 8 Byte. unsigned char gibt nur den Datentyp an, der an der Speicherstelle stehen sollte.

Außerdem sagt der Zeiger nichts darüber aus, auf wieviel Speicher er zeigt. Wie du schon gesagt hast zeigt er eben nur auch den Anfang deines Speicherblocks.

Also ist es größentechnisch egal, welchen Datentyp ich für den Zeiger verwende ? Es geht nur darum auf welchen Datentyp ich zeigen will.

Mit
unsigned char BildDaten[255];
kann ich ja wirklich nur 256 Byte an Daten speichern

pest
2010-04-11, 12:05:13
Mit
unsigned char BildDaten[255];


255 Werte ;)

unsigned char BildDaten[256] ist "das selbe" wie
unsigned char *BildDaten=new unsigned char[256]

Tiamat
2010-04-11, 13:21:10
Tach,

ich möchte Bilddaten speichern und benutze dazu einen Zeiger:

unsigned char *BildDaten;

Der Datentyp unsigned char ist ja gleichbedeutend mit BYTE.
Der Zeiger zeigt ja im Prinzip auf das erste Element des "Arrays" BildDaten. Wenn ich mir ein Byte-Array vorstelle, kann das ja die Länge [0...255] haben.

Wie groß kann das Bild maximal sein, damit es noch in den Zeiger passt ? Ansich sollte ja nach 256 Byte Schluss sein, oder ? Wieso bekommen ich dann Bilder gespeichert, die ~8 Kilobyte groß sind ?
Irgendwas kapier ich das grundlegend nicht :D

Ja du verwechselst was Grundlegendes.
Ein Byte kann 256 verschiedene Werte speichern. Der Wertebereich geht dabei bei unsigned char von 0-255.
Du kannst aber jederzeit ein Array deklarieren, das von mir aus 100000 Bytes speichert, also uchar x[100000]. Die Anzahl der Elemente wird als Länge bezeichnet, nicht der Wertebereich.

Ein Zeiger enthält lediglich eine Adresse auf einen Speicherbereich, in dem Fall auf das erste Element des Arrays. Anhand der Adresse kann auf den Wert zugegriffen werden, der in der Speicherzelle steht.

Es ist auch nicht egal, welchen Datentyp man für den Zeiger nimmt.
Der Zeiger sollte den gleichen Typ haben wie der Datentyp, den er referenziert,
mit Ausnahme Void Pointer.

The_Invisible
2010-04-11, 17:27:40
Ja du verwechselst was Grundlegendes.
Ein Byte kann 256 verschiedene Werte speichern. Der Wertebereich geht dabei bei unsigned char von 0-255.
Du kannst aber jederzeit ein Array deklarieren, das von mir aus 100000 Bytes speichert, also uchar x[100000]. Die Anzahl der Elemente wird als Länge bezeichnet, nicht der Wertebereich.

Ein Zeiger enthält lediglich eine Adresse auf einen Speicherbereich, in dem Fall auf das erste Element des Arrays. Anhand der Adresse kann auf den Wert zugegriffen werden, der in der Speicherzelle steht.

Es ist auch nicht egal, welchen Datentyp man für den Zeiger nimmt.
Der Zeiger sollte den gleichen Typ haben wie der Datentyp, den er referenziert,
mit Ausnahme Void Pointer.

der datentyp ist ja dazu da das der compiler weiß wieviele bytes er zb bei x[5] nach vorne springen soll, kann ja auch ein struct sein zb. ein void muss vor verwendung ja auch entsprechend gecastet werden.

mfg