2016-03-24 2 views
-4

Ich weiß, wenn wir eine char *c ="Hello"; deklarierten bedeutet, dass wir diese Zeichenfolge nicht ändern können. Aber wie kommt es mir in der Lage war, in C. dieses Array von Zeichenfolge ändernÄndern eines Arrays von Zeichenfolgen in C

char *p [] = {"Hello","World"}; 
*p = "Mode"; 

Sollte das mir einen Fehler nicht geben um zu versuchen, es zu ändern?

+0

Schauen Sie sich diese Antwort an, es ist ziemlich gut, das Konzept der Strings zu verstehen. http://StackOverflow.com/a/1011545/2555668 –

+1

@irqed Dies ist kein Duplikat dieser Frage. –

+0

Related: http://stackoverflow.com/questions/1704407/what-is-the-difference-between-char-s-and-char-s-in-in- – Lundin

Antwort

6

Sie ändern keine Zeichenfolge (Literal) irgendwo.

char *p [] = {"Hello","World"}; 

Hier p is an array (size 2) of pointer-to-char. Es ist eine Variable, es gibt nichts, das nur gelesen werden kann. Die Strings, auf die es aktuell zeigt, sind jedoch schreibgeschützt.

Sie ändern einfach das erste Element dieses Arrays, um auf eine andere (schreibgeschützte) Zeichenfolge zu zeigen. Dies ist das gleiche wie:

p[0] = "Mode"; 
0

p ist ein Array von Zeigern pointers.These modifizierbar sind, jedoch ihre Ziele (das, was sie zeigen auf) sind es nicht.

*p entspricht p[0], die der erste Zeiger im Array ist.

*p = "Mode" Ändern Sie den Wert des Zeigers p[0], nicht die Zeichenfolge Literal "hello".

+0

Ich sehe nicht, dass diese Antwort etwas hinzufügt, was meine Antwort nicht schon gesagt hat. –