# const char* und char*



## pepsi_gx (3. August 2009)

Hallo,

ein kurze Frage habe ich in der Praxis mit VC++:

was ist der Unterschied zwischen "const char*" und "char*"?

Was ich verstehen kann, ist das erste eine Konstante, so daß ihre Länge nicht veränderbar ist. Aber wozu benutzt man es statt "char*"	

Als Anmerkung habe ich schon oft so einen Konvertierungsfehler gehabt



> error C2440: '=' : cannot convert from 'const char *' to 'char *'



LG


----------



## deepthroat (3. August 2009)

Hi.





pepsi_gx hat gesagt.:


> was ist der Unterschied zwischen "const char*" und "char*"?
> 
> Was ich verstehen kann, ist das erste eine Konstante, so daß ihre Länge nicht veränderbar ist.


Also erstmal sind beides Zeiger. Der erste Zeiger zeigt auf einen konstanten String. D.h. der Zeiger kann verändert werden, aber die Daten auf die der Zeiger zeigt sind nicht änderbar.


pepsi_gx hat gesagt.:


> Aber wozu benutzt man es statt "char*"


Zuallererst sind Stringliterale konstant:

```
const char* str1 = "abcde";

// fehlerhafte Initialisierung:
char* str2 = "xyxxx";
```
Dann ist ja deine Frage eigentlich wozu das Schlüsselwort *const *verwendet wird?

Es ist einfach eine Zusicherung, die der Compiler überprüft (und mit einem Fehler bemängelt, falls diese verletzt wird), das Inhalte von Variablen nicht verändert werden. Im Prinzip ist es eine Hilfe für den Programmierer, der seinen Code mit dieser Art Zusicherung versehen kann.


```
int func(char* str);
```
Wenn du die Funktion func nutzt, wird der String welcher als 1. Parameter übergeben wird in der Funktion nun verändert oder nicht? Du weißt es nicht, mußt also davon ausgehen das die Daten evlt. verändert werden.

```
int func2(const char* str);
```
Hier wird der übergebene String mit Sicherheit nicht geändert, denn das würde der Compiler nicht erlauben.

Gruß


----------

