Wskaźniki, napisy i typy C
Połącz systemy typów C i Zig.
Wskaźniki, napisy i typy C to bezpłatna lekcja Zig Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Zig Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Zig Academy zawiera 4 lekcji w sumie.
Typy C są tłumaczone
Podczas importowania C przez Zig każdy typ C jest odwzorowywany na typ Zig. int staje się c_int, dzięki czemu szerokości dokładnie odpowiadają ABI języka C.
const x: c_int = 10;Liczby całkowite ABI C
Zig udostępnia nazwy zgodne z ABI, takie jak c_int, c_uint, c_long i c_char, aby wartości odpowiadały tym oczekiwanym przez C.
Wskaźniki C używają [*c]
Surowy wskaźnik C staje się specjalnym typem [*c]T. Może mieć wartość null i jest nieściśle konwertowany, odwzorowując elastyczne wskaźniki C.
var p: [*c]u8 = null;Dlaczego [*c] jest wyjątkowy
Typ [*c] łączy z wskaźnikami C o dowolnej długości, które mogą mieć wartość null. Tam, gdzie to możliwe, umożliwia konwersję do wycinków i wskaźników Zig oraz z powrotem.
Łańcuchy C to bajty
Łańcuch C to po prostu wskaźnik do bajtów zakończonych zerem. Nie przechowuje długości — występuje w nim tylko terminator null.
Literały zakończone terminatorem
Łańcuch w stylu C zapisuje się za pomocą formy z sentinelem. Typ [*:0]const u8 oznacza bajty zakończone wartością 0.
const s: [*:0]const u8 = "hello";Przekazywanie łańcuchów do C
Literały łańcuchowe Zig są już zakończone wartością null, więc można przekazać je bezpośrednio do funkcji C oczekujących wskaźnika char.
c.puts("done");Odczytywanie łańcucha C z powrotem
Aby zamienić łańcuch C na wycinek Zig, użyj std.mem.span, które przechodzi do bajtu null w celu ustalenia długości.
const slice = std.mem.span(cstr);Wskaźniki void
Wskaźnik void* języka C pojawia się w Zig jako ?*anyopaque. Przed użyciem należy rzutować go z powrotem na konkretny typ wskaźnika.
Rzutowanie za pomocą @ptrCast
Łączenie typów wskaźników po obu stronach granicy C wykorzystuje @ptrCast, które interpretuje wskaźnik na nowo bez zmiany adresu.
const p: *Node = @ptrCast(@alignCast(raw));Dopasowuj, nie zgaduj
Bezpiecznym nawykiem jest dopasowywanie dokładnych typów C: używaj c_int dla int oraz span dla łańcuchów, aby uniknąć niejawnych błędów.
Szybkie sprawdzenie
Przypomnij sobie, jak Zig zamienia łańcuch C w użyteczny wycinek.
Podsumowanie
Dowiedziałeś się, że typy C są odwzorowywane na nazwy ABI, takie jak c_int, wskaźniki C używają [*c], a std.mem.span zamienia łańcuchy C na wycinki. 🎯
Często zadawane pytania
Czy lekcja „Wskaźniki, napisy i typy C” jest bezpłatna?
Tak — pełny tekst „Wskaźniki, napisy i typy C” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Zig Academy, przejdź na CoddyKit PRO. Kurs Zig Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wskaźniki, napisy i typy C”?
Połącz systemy typów C i Zig. Ćwiczysz Zig Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Zig Academy?
Nie wymagamy żadnego doświadczenia. Zig Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Wskaźniki, napisy i typy C”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Zig Academy?
Tak. Każda lekcja Zig Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Importowanie nagłówków C za pomocą @cImport
- Wywoływanie funkcji C i linkowanie
- Wskaźniki, napisy i typy C
- zig translate-c do odczytywania C jako Zig