Frage

Dies ist eine Fortsetzung einer weiteren Frage , die ich habe.

Betrachten Sie den folgenden Code:

char *hi = "hello";

char *array1[3] = 
{
    hi,
    "world",
    "there."
};

Es wird zu meiner Überraschung nicht kompiliert (anscheinend kenne ich die C-Syntax nicht so gut wie ich dachte) und generiert den folgenden Fehler:

  error: initializer element is not constant

Wenn ich das Zeichen * in char [] ändere, wird es gut kompiliert:

char hi[] = "hello";

char *array1[3] = 
{
    hi,
    "world",
    "there."
};

Kann mir jemand erklären warum?

War es hilfreich?

Lösung

Im ersten Beispiel (char *hi = "hello";) erstellen Sie einen Nicht-Konstanten-Zeiger, der so initialisiert wird, dass er auf die statische Konstantenzeichenfolge "Hallo" zeigt.Dieser Zeiger könnte theoretisch auf alles zeigen, was Sie möchten.

Im zweiten Beispiel (char hi[] = "hello";) definieren Sie speziell ein Array und keinen Zeiger, sodass die Adresse, auf die es verweist, nicht geändert werden kann.Beachten Sie, dass ein Array als nicht modifizierbarer Zeiger auf einen bestimmten Speicherblock betrachtet werden kann.

Ihr erstes Beispiel wird tatsächlich ohne Probleme in C ++ kompiliert (zumindest mein Compiler).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top