C++ Pointer

Hi, eigentlich nur ne billig Frage, aber ich würds doch ganz gerne wissen:

wenn man einen Pointer auf eine Konstante intialisiert, was heißt das dann genau, weil ich das nirgends gefunden habe.
Beispiel:
Code:
char *String="hi wie geht's?";
//Ist dass das gleiche wie:
const char String[ ]=hi wie geht's?";
mfg Kennie
 
Also:
wenn du einen Pointer Initialisierst dann zeigt er auf den allerersten Teil des Elementes aud das du es initialisiert hast.
In dienem Fall zeigt: *String auf h
und dann kannst du das praktisch machen wie die Handhabung eines Arrays, denn
Arrays und Strings sind sehr eng miteinander verwandt, und ein String ist eigentlich nichts anderes als: char Array[]
Nur das mit der benutzugn eines Strings , z.b. beim auslesen mit cout oder printf eine automatische eingebaute interation abgespielt wird die jedes Zeichen ausgibt bis es auf ein \0 trifft, was das Terminierungszeichen fuer eine Zeichenfolge ist.
mfg

sw33t
 
ok, aber angenommen ich will strings mit Funktionen übergeben:
Code:
#include<iostream>
using namespace std;
char* Func(void)
{
char *Hi="Hi";
return Hi;
}
int main(void)
{
char String[30];
String=Func();
return 0;
}
Dieser Code funzt nicht, denn String wird dann nicht Hi,
Also wie mache ich es dort, dass String Hi wird ( nicht high!^^ ) ?
 
Das geht auch nicht da deine Funktion einen Pointer zurrueckgibt und String eine zeichenfolge erwartet.
das heisst du musst den Rueckgabewert aendern und den Pointer vorher dereferenzieren oder hinterher beim zuweisen fuer den String, aber das ist in deinem Fall eigentlich total egal denn selbst wenn du den Pointer derefenzierst wirst du nur muell bekommen den der Speicherplatz auf den der Pointer dann zeigt wird leer sein, bzw nur muell enthalten.
Weil das Element auf das der Pointer zeigt dann nicht mehr existiert.

Angenommen es existiert noch musst du eine Funktino schreiben die dann ueber den Speicher iteriert und das solange bis es "\0" antrifft damit es weiss das der String zuende ist.
Das sind die 2 vorteile von Strings.
Schau dir dazu ambesten mal call by value und call by reference an und setz dich noch etwas mehr mti Strings und Pointers auseinander.
mfg

sw33t
 
@sw33tlull4by
Ich glaub er kennt sich nicht sooo besonders in Pointer-Arythmetik aus, also nicht mit Fachbegriffen schleudern xD
Ich biete mal ne Lösung an und sag, warum sie funktionert. :)

Eine Lösung währe Diese:
Code:
char* Func()
{
	static char* Hi="Hi\0";
	return Hi;
}

int main(void)
{
	char* String;
	String = Func();
	cout << String ;
	return 0;
}

Deine Funktion:
Code:
char* Func(void)
{
char *Hi="Hi";
return Hi;
}

Geht nicht, weil nachdem eine Funktion durch ist, die Variablen, die du in der Funktion erstellt hast, gelöscht werden. Der * besagt aber, dass die Variable nicht kopiert werden soll, sondern das GENAU der Speicher aus der Funktion benutzt werden soll. Da is aber leider nix mehr, also kriegst du Datenschrott zu sehen.

Meine Methode funktioniert aber, weil static Variablen im Gegensatz zu anderen, weiterhin existieren.

Ich persönlich hasse char arrays... ^^ Da macht man leicht solche Fehler, wenn man die Logik nicht drauf hat. Ich benutz da lieber die string struktur (Ist doch eine Struktur, oder?) oder benutze für andere Typen Refferenzen(ein &) stat Zeiger (das *).
Nettes Tutorial dazu:
http://tutorial.schornboeck.net/c_string.htm
 
ok, danke ich habs begriffen und sehe auch ein welchen logischen Fehler ich mit dem NICHT static gemacht habe.
@Extinction:
string ist glaub ich ein Objekt, sonst gäbe es keine überladenen operatoren für diese Klasse.
Mfg Kennie
 
string ist eine STL-Klasse und existiert daher nur bei C++. Ich würde wenn man in C, in einer Funktion einen String manipulieren will, diesen immer als Parameter mitgbeben.

z.B. so:

Code:
char* func(char *str)
{
    /* hier irgendwas mit str machen */

   /*am ende einen zeiger auf den string wieder zurückgeben, ist allerdings nicht wirklich nötig */
    return str;
}
 
Zurück
Oben