Array Zeiger

Hi,

ich wollte ganz gerne ein Array einer Funktion übergeben , ich habe erfahren das ich das am besten mit einem Zeiger machen kann aber ich scheitere schon daran mir diesen Zeiger ausgeben zu lassen -.-

Code:
void funktion ( char *array[10] );

int main()
{
    char array[10] = "hallo";
    char *pPointer = &array[10];
    
    cout << *pPointer;
    
    return 0;
}

Bei der Ausgabe kommen nur komische Zeichen, was mache ich da falsch ?
Wie kann ich ein eingelesenes char Array über eine Funktion manipulieren und wieder an eine Variable zurück geben ?


MfG
 
Wenn ich mich nicht ganz stark irre(habe C/C++ lange nicht mehr gemacht) muss das lauten:

char* pPointer = &array;//ist die Position des 1.elemenes des Arrays
cout << *pPointer;

Der Grund wiso du dort eine Komische Ausgabe hast, welche sich mit sicherheit jedesmal aendert ist, das dein String nur 6Byte lang ist du aber in dem String 10 Byte reserviert hast, deren Wert undefiniert ist.
Ergo steht da weiss der Geier was und du weisst dem Zeiger die Adresse des 10 Elementes zu und das hast du nunmal nicht beschrieben.
Wenn du nun ein Wort eingibst was 9 Zeichen hat wird deine Ausgabe immer \0 sein womit C einen String terminiert.
mfg

sw33t
 
Defakto denke ich du solltest, um den Umgang mit Arrays zu lernen vllt nicht den char arrays anfangen, die verhalten sich bissi komisch.

In Zeile 5 erstellst du ein array mit 10 Zeichen, wovon du die ersten 5 also array[0] - array[4] gleich zuweist.

array selber ist nun, soweit ich mich errinere, ein Zeiger auf den Beginn eines Speicherbereichs. Jeder char* String endet mit einem Abschlusszeichen (glaub '\0'), um damit deutlich zu machen, dass der String nun endet.

In der 6. Zeile weist du nun *pPointer alles zu, was ab zeichen 10 in Array steht.(naja Vielmehr weist du die Addresse zu.

Deshalb gibt es komische zahlen, da array[10] eigentlich nicht mehr zu array gehört.


Grundsätzlich solltest du bei arbeiten mit char* immer mit strlen() arbeiten, um zu kontrollieren, dass du nicht irgendwelche Speicherbereiche verunstaltest.

Im Prinzip kannst du dann beliebig mit dem Übergebene char Array arbeiten, du solltest aber aufpassen, dass die Addressen noch gültig sind, wenn du mit ihnen arbeitest.
Du kannst z.B. nicht einen Pointer auf ein char Array zurückgeben, welches in der Funktion angelegt wurde, da dieses nach beendigung der Funktion nicht mehr existiert.

Hoffe konnte helfen und is net alles falsch.

MFG
Ace

//Edit: Ehmm ja zu langsam xD
 
Ja, char arrays sind wirklich komisch. Und irgendwie in jeder IDE anders zu handhaben... O.o

Ich weis, es ist immer blöd das gesagt zu bekommen, aber: Suchen / Google / etc..
Dieser Thread ist keinen Monat alt:
Die Logik der char pointer

Bei deinem Problem möchte ich mal ganz dezent auf meinen Post verweisen und folgendes hervorheben: ;)
Code:
void Func(char* *Hi)
{
	*Hi="Hi";
}

int main(void)
{
	char* String;//="Bsp."
	Func(&String);
	cout << String ;
	return 0;
}
Ist im Grunde genommen das, was sw33tlull4by gesagt hat. Aber am Beispiel ist es immer besser zu verstehen. Das & ist der feine Unterschied. Es zeigt auf das 1 element...
 
Hi nochmal:
Also:
Ich denke nicht das charpointer so schwierig sind,ist wahrscheinlich geschmackssache, denn bei Charzeigern hast du pro Position 1 byte, bei INT jedoch 4 Byte, Short 2 Byte usw. Deswegen verweis auf Acekiller73 seinen Post, denn dann hast du weniger Probleme mit Pointerarithmetik aber das ist fuer dich noch ein bischen hin,denn erstmal Grundlagen....
Ich habe oben im Post einen fehler gehabt und nicht gesehe das das eigentlich ein zugriff auf einen nicht Definierten Speicherbereich ist, hat dein Kompiler keinen Fehler ausgegeben???

Nun zum Grund meines Posts:
Der feine unterschied ist nicht das &
Dieser Operator gibt nur die Adresse zurrueck, der unterschied ist :
&array und &array[10]
Denn beim ersten mal wird die Adresse vom ersten element[array[0]] angegeben und beim 2.mal die Adresse vom letzen bzw nicht definierten bereich welcher direkt dahinter liegt.
so long

sw33t
 
Zurück
Oben