można zrobić:
const char* yo2 = (char [4]) { 'a', 'b', 'c', '\0' };
co jest ważne i co chcesz osiągnąć. Zauważ, że nie jest równoznaczne z:
const char* yo2 = "abc":
W pierwszym przypadku, gdy yo2
została zadeklarowana w pliku-Scope: związek dosłowne tablica ma statyczny czas przechowywania ale kiedy yo2
została zadeklarowana w bloku-Scope dosłowne związek ma automatyczny czas przechowywania.
W tym ostatnim przypadku, "abc"
jest literałem ciąg i ma czas przechowywania statycznego (zakres pliku lub zakres bloku).
Można również użyć tablicę zamiast wskaźnika:
const char yo2[] = { 'a', 'b', 'c', '\0' };
dotycząceTwojego przykład. C:
const char* yo2 = { 'a', 'b', 'c', '\0' };
nie jest ważna i kompilator interpretuje ją jako:
const char* yo2 = (char *) 'a';
Wartość 'a'
nie jest wartością wskaźnik (adres) tak dereferencing yo2
wywołuje niezdefiniowanej zachowanie.
Nie! RHS jest tymczasowy; nie ma gwarancji, że się utrzyma. – nneonneo
@nneonneo to dosłownie złożony. Ma automatyczny czas przechowywania, jeśli został zadeklarowany w zakresie bloku. Dlaczego teraz spadamy? – ouah
W C, tak. Ale staje się to niebezpieczne, gdy tylko użyjesz go w C++ lub skompilujesz go w trybie C++. Dlatego nie jest to bezpieczna praktyka w moich książkach. – nneonneo