Aide-mémoire C
Dernière mise à jour
Hello World et structure d'un programme
Chaque programme C démarre à main et renvoie un int.
| Élément | Code |
|---|---|
| Inclure un en-tête | #include <stdio.h> |
| Point d'entrée | int main(void) { ... } |
| Avec des arguments de ligne de commande | int main(int argc, char *argv[]) { ... } |
| Afficher une ligne | printf("Hello, World!\n"); |
| Renvoyer un succès | return 0; |
| Commentaire sur une ligne | // comment |
| Commentaire en bloc | /* comment */ |
Types de données
Les tailles dépendent de la plateforme ; les minimums ci-dessous sont garantis par la norme.
| Type | Description |
|---|---|
int | Entier, au moins 16 bits (généralement 32) |
unsigned int | Entier non négatif |
long / long long | Entiers plus larges (au moins 32 / 64 bits) |
float / double | Virgule flottante simple / double précision |
char | Octet unique, aussi utilisé pour les caractères |
_Bool (bool via <stdbool.h>) | true ou false |
size_t | Type non signé pour les tailles et les indices |
void | Aucun type - utilisé pour les fonctions et les pointeurs génériques |
Spécificateurs de format printf et scanf
Marqueurs qui correspondent au type de chaque argument.
| Spécificateur | Correspond à |
|---|---|
%d / %i | int signé |
%u | int non signé |
%ld / %lld | long / long long |
%f | double (et float dans printf) |
%.2f | double avec 2 décimales |
%c | char unique |
%s | Chaîne (char *) |
%p | Adresse de pointeur |
%x | int non signé en hexadécimal |
%zu | size_t |
Opérateurs
| Opérateur | Signification |
|---|---|
+ - * / % | Arithmétique (% est le reste entier) |
== != | Égal / différent |
< > <= >= | Comparaison |
&& || ! | ET / OU / NON logiques |
& | ^ ~ << >> | ET, OU, OU exclusif, NON binaires, décalages |
++ -- | Incrémentation / décrémentation |
+= -= *= /= | Affectation composée |
cond ? a : b | Conditionnelle ternaire |
sizeof(x) | Taille d'un type ou d'une variable en octets |
Contrôle de flux
| Instruction | Syntaxe |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Else if | else if (x == 0) { ... } |
| Switch | switch (n) { case 1: ...; break; default: ...; } |
| Boucle while | while (i < n) { ... } |
| Boucle do-while | do { ... } while (i < n); |
| Boucle for | for (int i = 0; i < n; i++) { ... } |
| Break / continue | break; sort d'une boucle, continue; passe à l'itération suivante |
| Goto (rare) | goto label; ... label: |
Fonctions
À déclarer avant utilisation, ou ajoutez un prototype en haut du fichier.
| Opération | Syntaxe |
|---|---|
| Définir une fonction | int add(int a, int b) { return a + b; } |
| Prototype (déclaration) | int add(int a, int b); |
| Sans valeur de retour | void greet(void) { ... } |
| Sans paramètres | int rand_seed(void) { ... } |
| Passage par pointeur (modifier) | void inc(int *p) { (*p)++; } |
| Passer un tableau | int sum(int arr[], int n) { ... } |
| Static (local au fichier) | static int helper(void) { ... } |
Pointeurs et mémoire
Un pointeur contient une adresse. La mémoire du tas doit être libérée manuellement.
| Opération | Syntaxe |
|---|---|
| Déclarer un pointeur | int *p; |
| Adresse de | p = &x; |
| Déréférencer (lire/écrire) | int y = *p; / *p = 10; |
| Pointeur nul | int *p = NULL; |
| Allouer sur le tas | int *a = malloc(n * sizeof(int)); |
| Allouer + mettre à zéro | int *a = calloc(n, sizeof(int)); |
| Redimensionner une allocation | a = realloc(a, newSize); |
| Libérer la mémoire du tas | free(a); |
| Arithmétique de pointeurs | *(a + i) est identique à a[i] |
Tableaux et chaînes
En C, les chaînes sont des tableaux de char terminés par \0.
| Opération | Syntaxe |
|---|---|
| Déclarer un tableau | int nums[5]; |
| Initialiser un tableau | int nums[] = {1, 2, 3}; |
| Accéder à un élément | nums[0] = 10; |
| Longueur d'un tableau (sur la pile) | sizeof(nums) / sizeof(nums[0]) |
| Littéral de chaîne | char s[] = "hello"; |
| Longueur d'une chaîne | strlen(s) (exclut \0) |
| Copier une chaîne | strcpy(dst, src); |
| Comparer des chaînes | strcmp(a, b) == 0 signifie égales |
| Concaténer des chaînes | strcat(dst, src); |
Structures et stdlib courante
| Opération | Syntaxe |
|---|---|
| Définir une structure | struct Point { int x; int y; }; |
| Déclarer et accéder | struct Point p; p.x = 1; |
| Accéder via un pointeur | p->x = 1; (identique à (*p).x) |
| Alias de type | typedef struct Point Point; |
| Lire une saisie | scanf("%d", &n); |
| Convertir une chaîne en int | int n = atoi("42"); |
| Valeur absolue / puissance | abs(x) (int), pow(x, y) de <math.h> |
| Trier un tableau | qsort(arr, n, sizeof(int), cmp); |
La syntaxe C, les spécificateurs de format et les schémas de pointeurs que vous utilisez le plus, sur une seule page. Cet aide-mémoire C est une référence rapide pour écrire du C - les types de données, les spécificateurs printf/scanf, les opérateurs, le contrôle de flux, ainsi que les opérations de pointeurs et de mémoire qui font trébucher.
Tout ce qui figure ici est du C standard (C99/C11) et se compile avec gcc ou clang. Copiez ce dont vous avez besoin, ou essayez n'importe quel extrait en direct dans le playground C - aucun compilateur à installer.
FAQ de l'aide-mémoire C
Cet aide-mémoire C est-il gratuit ?
Quelle est la différence entre la pile et le tas en C ?
malloc ou calloc, vit jusqu'à ce que vous appeliez free, et s'utilise lorsque vous avez besoin de mémoire qui survit à la fonction courante ou dont la taille n'est connue qu'à l'exécution. Oublier de free la mémoire du tas provoque une fuite de mémoire.Pourquoi scanf a-t-il besoin d'une esperluette (&) alors que printf non ?
scanf réécrit la valeur dans votre variable, il a donc besoin de l'adresse de la variable - c'est ce que &x lui donne. printf ne fait que lire la valeur, vous passez donc la valeur elle-même. L'exception, ce sont les chaînes : un tableau de char se transforme déjà en pointeur, vous passez donc scanf("%s", name) sans le &.