Zeiger auf Feld von konstanten Zeichen
-
Danke, war gemeint wie von Swordfish vorgeschlagen.
Danke, für die schnellen Antworten!
-
Dann passe aber auf, falls du mal sizeof darauf verwendest, es gilt nämlich
sizeof(i) != sizeof(c)
Um das zu verstehen, muss man natürlich Array und Zeiger verstanden haben.
-
Wutz schrieb:
Dann passe aber auf, falls du mal sizeof darauf verwendest, es gilt nämlich
sizeof(i) != sizeof(c)
Um das zu verstehen, muss man natürlich Array und Zeiger verstanden haben.
Moment.
In meinem Beispiel gibt i die Anfangsadresse des Arrays aus. c ist hingegen die Adresse auf die der Pointer zeigt, die in &c gespeichert ist. Wenn &c nicht initialisiert ist, kann es natürlich Probleme geben. Dann kann alles mögliche in &c drin stehen.
Ist vielleicht das gemeint oder worauf wolltest du hinaus?
-
Ich will darauf hinaus, was ich geschrieben habe:
sizeof(i) != sizeof(c)
-
Hm schrieb:
In meinem Beispiel gibt i die Anfangsadresse des Arrays aus.
njet. I ist eine variable, die gibt garnix aus.
Hm schrieb:
c ist hingegen die Adresse auf die der Pointer zeigt,
njet. C ist ein pointer auf char und zeigt auf das erste element des arrays i; in der variable c ist die adresse von i[ 0 ] abgelegt.
Mm schrieb:
wenn &c nicht initialisiert ist, kann es natürlich Probleme geben.
aha, was fuer welche denn?
Mm schrieb:
Dann kann alles mögliche in &c drin stehen.
das ist das problem? Das waere nur ein problem, wenn du ebendiesen umstand, dass in uninitialisierten variablen zufaellige werte vorhanden sein koennen, ignorieren wuerdest. Aber offenbar weisst Du darueber bescheid.
Bemueh Dich bitte um eine etwas klarere Ausdrucksweise, denn sonst wird nicht klar, ob Du verstanden hast oder es sich nur so anhoert.
-
Könnt ihr das Geheimnis vielleicht auflösen? Ich bin schon ganz kribellig.
sizeof(i) gibt bei mir 6 aus und sizeof(c) 8.
Warum?i hat Anfangsadresse des Arrays als Wert und c doch auch?!
-
i ist kein Zeiger und hat dementsprechend auch keine Adresse als Wert. Es ist ein Array von 6 Zeichen (Hallo + Sentinel) je 1 Byte, also 6 Byte lang. c ist ein Zeiger.
-
Hm, stimmt.
Aber jetzt kommt die Ausnahme:void foo(int arg[]) { int *i = arg; }
Hier ist sizeof(arg) = sizeof(i).
-
Hm, Trollst Du?
-
Hm schrieb:
Hier ist sizeof(arg) = sizeof(i).
arg ist ja auch kein Array, sondern direkt ein Pointer (Sonderregel für Funktionsparameter).
-
In Funktionssignaturen werden die Typen der Parameter durch eine Art Fleischwolf gedreht, um sie handhabbar zu machen (spezielles Augenmerk liegt da auf unvollständigen Typen). Im Fall von Arrays:
ISO/IEC 9899:1999 6.7.5.3 (7) schrieb:
A declaration of a parameter as "array of type" shall be adjusted to "qualified pointer to type", where the type qualifiers (if any) are those specified within the [ and ] of the array type derivation. (...)
D.h. arg ist da ein Zeiger.
-
Ich weiss, nur ist das eben ohne dem nötigen Hintergrundwissen nicht offensichtlich.