Pointeurs, chaînes et types C
Faites le lien entre les systèmes de types C et Zig.
Pointeurs, chaînes et types C est une leçon Zig Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Zig Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Zig Academy comprend 4 leçons au total.
Les types C sont traduits
Lorsque Zig importe du C, chaque type C correspond à un type Zig. Un int devient c_int, de sorte que les largeurs correspondent exactement à l'ABI C.
const x: c_int = 10;Les entiers de l'ABI C
Zig fournit des noms correspondant à l'ABI, comme c_int, c_uint, c_long et c_char, afin que vos valeurs correspondent à ce qu'attend C.
Les pointeurs C utilisent [*c]
Un pointeur C brut devient le type spécial [*c]T. Il peut être nul et se convertit de manière souple, à l'image des pointeurs flexibles de C.
var p: [*c]u8 = null;Pourquoi [*c] est spécial
Le type [*c] fait le pont avec les pointeurs C de longueur quelconque et potentiellement nuls. Il se convertit, lorsque c'est possible, en tranches et pointeurs Zig, et inversement.
Les chaînes C sont des octets
Une chaîne C est simplement un pointeur vers des octets se terminant par zéro. Aucune longueur n'est enregistrée : seul le terminateur nul l'indique.
Littéraux terminés par zéro
Écrivez une chaîne de style C avec la forme à sentinelle. Le type [*:0]const u8 indique des octets qui se terminent par 0.
const s: [*:0]const u8 = "hello";Passer des chaînes à C
Les littéraux de chaîne Zig sont déjà terminés par zéro ; vous pouvez donc les transmettre directement aux fonctions C qui attendent un pointeur vers char.
c.puts("done");Récupérer une chaîne C
Pour transformer une chaîne C en tranche Zig, utilisez std.mem.span, qui parcourt les octets jusqu'à l'octet nul pour en trouver la longueur.
const slice = std.mem.span(cstr);Les pointeurs void
Le void* de C apparaît en Zig sous la forme ?*anyopaque. Convertissez-le à nouveau en pointeur concret avant de l'utiliser.
Convertir avec @ptrCast
Le passage d'un type de pointeur à un autre à la frontière C utilise @ptrCast, qui réinterprète un pointeur sans modifier l'adresse.
const p: *Node = @ptrCast(@alignCast(raw));Faire correspondre, ne pas deviner
La bonne habitude consiste à faire correspondre les types exacts de C : utilisez c_int pour int et span pour les chaînes, afin qu'aucune erreur ne reste silencieuse.
Vérification rapide
Rappelez-vous comment Zig transforme une chaîne C en tranche utilisable.
Récapitulatif
Vous avez appris que les types C correspondent à des noms d'ABI comme c_int, que les pointeurs C utilisent [*c] et que std.mem.span transforme les chaînes C en tranches. 🎯
Questions Fréquemment Posées
La leçon « Pointeurs, chaînes et types C » est-elle gratuite ?
Oui — le texte complet de « Pointeurs, chaînes et types C » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Zig Academy, passe à CoddyKit PRO. Le cours Zig Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Pointeurs, chaînes et types C » ?
Faites le lien entre les systèmes de types C et Zig. Tu pratiques Zig Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Zig Academy ?
Aucune expérience préalable n'est requise. Zig Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Pointeurs, chaînes et types C » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Zig Academy ?
Oui. Chaque leçon Zig Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Importer des en-têtes C avec @cImport
- Appeler des fonctions C et effectuer la liaison
- Pointeurs, chaînes et types C
- zig translate-c pour lire le C comme du Zig