Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Algorytmy i podstawy informatyki

Słowa kluczowe: Tablica znaków w C++

W języku C++ zdefiniowano zmienną char zm1[10]; Zmienna ta jest

A. tablicą znaków.
B. znakiem.
C. tablicą łańcuchów.
D. liczbą.

Pytanie z egzaminu CKE, styczeń 2022 (arkusz EE.09-SG-22.01).

Zapis char zm1[10]; oznacza deklarację tablicy 10 elementów typu char, czyli tablicę znaków. W C++ nawiasy kwadratowe po nazwie zmiennej mówią, że nie tworzysz pojedynczej zmiennej, tylko ciąg elementów tego samego typu zapisanych obok siebie w pamięci. Każdy element tej tablicy może przechowywać jeden znak, na przykład 'A', 'x' albo znak końca tekstu '\0'. Indeksy takiej tablicy idą od 0 do 9, więc zm1[0] to pierwszy znak, a zm1[9] to ostatni dostępny element. W praktyce taka tablica bywa używana jako bufor na tekst w stylu języka C, ale trzeba pamiętać, że łańcuch znaków wymaga zakończenia znakiem zerowym. Czyli dla napisu czytelnego jako tekst masz zwykle miejsce na 9 normalnych znaków i kończące '\0'. Moim zdaniem to jest ważny szczegół, bo często uczniowie mylą tablicę znaków z gotowym typem tekstowym. We współczesnym C++ do tekstów częściej zaleca się std::string, a do bezpieczniejszych tablic std::array<char, 10>, bo łatwiej kontrolować rozmiar i unikać wyjścia poza zakres. Sama deklaracja char zm1[10]; nadal jednak jednoznacznie oznacza tablicę znaków.
W tej deklaracji kluczowe są dwa elementy: typ char oraz nawiasy kwadratowe z rozmiarem 10. Typ char sam w sobie oznacza pojedynczy znak, ale zapis char zm1[10]; zmienia sytuację, bo po nazwie zmiennej pojawia się [10]. To informacja dla kompilatora, że ma utworzyć tablicę złożoną z dziesięciu elementów typu char, a nie jedną wartość. Dlatego traktowanie tej zmiennej jako pojedynczego znaku jest typowym skrótem myślowym: ktoś patrzy tylko na char i pomija część [10]. W C++ to właśnie nawiasy kwadratowe decydują tutaj o strukturze danych. Nie jest to też liczba. Co prawda znak w pamięci jest przechowywany jako wartość kodu znakowego, na przykład zgodnie z ASCII lub innym kodowaniem, ale semantycznie typ char służy do przechowywania znaków, a cały obiekt jest tablicą takich elementów. Mylenie reprezentacji binarnej z typem danych to dość częsty błąd, zwłaszcza na początku nauki programowania. Nie można też powiedzieć, że jest to tablica łańcuchów. Tablica łańcuchów musiałaby zawierać wiele tekstów, na przykład obiekty std::string albo dwuwymiarową tablicę znaków, gdzie każdy wiersz byłby osobnym napisem w stylu C. Deklaracja char zm1[10]; daje tylko jeden bufor znakowy o długości 10 elementów. Może on przechowywać pojedynczy napis zakończony znakiem '\0', ale sama tablica nie jest tablicą wielu napisów. Z mojego doświadczenia najlepiej czytać takie deklaracje od nazwy: zm1 jest tablicą 10 elementów, a każdy element ma typ char. To proste podejście mocno ogranicza pomyłki.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.