Zum Inhalt springen

Zeiger auf Array


Blue55

Empfohlene Beiträge

Hi,

versuch´s doch mal mit: **

Da char* das selbe wie char[0] ist kann man halt auch ** schreiben.

Bsp.:

char* ist ein Feld von char-varibalen

char** ist ein Zeiger auf ein Feld von char-variablen

oder

int** ist halt ein zeiger auf ein Feld mit int-Variablen

Allerdings solltest du bei dem ganzen aufpassen, wo du liest und vor allem ( !!!wichtig!!! ) wo du schreibst, da der Compiler hier nicht erkennt, wo das Feld zuende ist. So kannst du ohne Probleme auf das Feld n+3 in einem n-großen Array zugreifen (lesend und schreibend).

Hoffe das hilft dir weiter...

Eight

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Eight

Hi,

versuch´s doch mal mit: **

Da char* das selbe wie char[0] ist kann man halt auch ** schreiben.

Bsp.:

char* ist ein Feld von char-varibalen

char** ist ein Zeiger auf ein Feld von char-variablen

Vorsicht mir solchen Aeusserungen, es gibt sehr wohl Unterschiede zwischen char * und char[], bzw den Pointern darauf! Naeheres in der Section 6 der C-FAQ (http://www.faqs.org/faqs/C-faq/faq/).

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Eight

char* ist ein Feld von char-varibalen

char** ist ein Zeiger auf ein Feld von char-variablen

oder

int** ist halt ein zeiger auf ein Feld mit int-Variablen

char* ist ein Zeiger auf eine char Variable und kein Feld von char Variablen.

char** ein Zeiger auf ein Zeiger auf eine char Variable und kein Zeiger auf ein Feld von char Variablen !!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Is ja gut und schön, aber sollte dann nicht in folgendem Beispiel in cChar der Inhalt von pString stehen? Tut es aber nicht. In cChar steht nur das erste Char von pString.

char* pString = "Teststring";

char cChar = *pString;

Also siehts für mich schon so aus als wäre pString ein Feld, da: char cChar = *(pString+2); cChar den dritten Buchstaben von pString zuweist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von maddin

char* ist ein Zeiger auf eine char Variable und kein Feld von char Variablen.

char** ein Zeiger auf ein Zeiger auf eine char Variable und kein Zeiger auf ein Feld von char Variablen !!!

char*: Zeiger auf eine Adresse, die vom Compiler mit der Länge 1 Byte gehandelt wird -> Variablentypen sind u.a. dazu da um den Offset zu haben (deswegen kann auch kein Compiler nen void-Zeiger direkt handeln !)

So und jetzt kommt der nächste, der eine noch genauere Definition gibt :D :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Eight

Is ja gut und schön, aber sollte dann nicht in folgendem Beispiel in cChar der Inhalt von pString stehen? Tut es aber nicht. In cChar steht nur das erste Char von pString.

char* pString = "Teststring";

char cChar = *pString;

Also siehts für mich schon so aus als wäre pString ein Feld, da: char cChar = *(pString+2); cChar den dritten Buchstaben von pString zuweist.

Natürlich kann man ein Byte auch als "Feld" bezeichnen. Jeder definiert das hier irgendwie anders.

Man muss sehen dass *pString hier dasselbe ist wie *(pString[0]).

Dei erste Adresse eines solchen Feldes kann man auch ohne die Indexklammern schreiben, was oft zum missverständnissen führt.

Deswegen halte ich es dann fast immer so:

char *test_str="Hallo";

char* ptr_str;

pst_str=&test_str[0];

und NICHT pst_str=test_str;

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Eight

Also siehts für mich schon so aus als wäre pString ein Feld, da: char cChar = *(pString+2); cChar den dritten Buchstaben von pString zuweist.

Wenn Du in eine Reihenhaussiedlung ziehst, dann ist klar, dass zwei Hausnummern weiter ein Haus steht, das Deinem sehr ähnlich sieht. Das kannst Du aber nicht aus der Hausnummer allein folgern ;)
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 8 Jahre später...

Hallo Leute,

dieses Thema ist zwar schon alt, aber ich hoffe ihr könnt mir trotzdem helfen.

In meinem Programm habe ich 3 Felder, nun muss ich 3 Zeiger erstellen die auf die Felder zeigen.

also angenommen ein Feld is

double x[N];

und ein Zeiger:

double (*px)[N];

soweit so gut, jedoch wie sage ich dem Zeiger jetzt dass er auf mein zuvor erstelltes und gefülltes Feld x zeigen soll?

und wenn das geschafft ist, muss ich ein neues Feld erstellen mit dem glichen Inhalt. Dazu soll der Zeiger verwendet werden. Wie sage ich dann meinem neuen Feld, dass es sich seine Werte von diesem Zeiger holen muss??

:confused::confused::confused::confused::confused:

mfg

Link zu diesem Kommentar
Auf anderen Seiten teilen

soweit so gut, jedoch wie sage ich dem Zeiger jetzt dass er auf mein zuvor erstelltes und gefülltes Feld x zeigen soll?
So, wie du es bei jedem anderen Zeiger auch machen würdest:

px = &x;

und wenn das geschafft ist, muss ich ein neues Feld erstellen mit dem glichen Inhalt. Dazu soll der Zeiger verwendet werden. Wie sage ich dann meinem neuen Feld, dass es sich seine Werte von diesem Zeiger holen muss??
memcpy oder eine Schleife.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...