Zeichenzeiger vs Int Zeiger an Funktionen übergeben

Ich dachte, ich verstehe Zeiger, aber ich denke, es gibt eine Nuance, wie sie anders behandelt werden, der ich nicht ganz folge. Wenn ich einen Integer-Zeiger oder die Adresse eines Integer-Zeigers an showInt übergebe, wird die gleiche Speicheradresse wie außerhalb der Funktion ausgegeben. Jedoch. Wenn ich den folgenden Zeiger an showChar übergebe;

char* value = "One";
showChar(value);

Die Adresse des ersten Elements ist innerhalb der Funktion anders als außerhalb der Funktion. Ich verstehe, dass dies ein Verhalten ist, das mit der Übergabe von Werten vereinbar ist, und dass eine Kopie des Zeigers innerhalb der Funktion erstellt wird. Ich hatte jedoch den Eindruck, dass eine Kopie eines Zeigers immer noch dieselbe Adresse enthält. Warum ist es anders, wenn es um Zeiger auf Zeichen geht? Wenn der Zeichenzeiger nur die Adresse des ersten Elements des Zeichenfolgenliteral speichert, warum zeigt der Zeiger in der Funktion dann nicht auf denselben Speicherort, sondern auf einen neuen Bereich im Speicher? Das deutet darauf hin, dass es keinen Zeichenzeiger kopiert, sondern einen neuen Zeichenzeiger erstellt und ihm den Wert zuweist, auf den der ursprüngliche Zeiger zeigt. Wenn ja, verstehe ich nicht warum.

Ich verstehe, dass Sie auf die Zeigeradresse in der Funktion zugreifen können, indem Sie stattdessen einen Zeiger auf einen Zeiger oder einen Verweis auf einen Zeiger übergeben, aber warum dies der Fall ist, verwirrt mich immer noch.

Übergabe eines Zeigers an char;

void showChar(char* name){

 cout << name << endl;
 cout << &name << endl;
}

Übergabe eines Zeigers an int;

void showInt(int* num){

 cout << num << endl;
 cout << *num << endl;
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage