Allocation dynamique de tableau en C

Dans le domaine de l'informatique, la compréhension de l'allocation dynamique des tableaux en C est cruciale pour une gestion efficace de la mémoire. Cet article a pour but de donner un aperçu fondamental du processus d'allocation et de désallocation de la mémoire pour les tableaux dans la programmation C. Tu découvriras l'allocation dynamique des tableaux 1D et 2D, l'utilisation de fonctions telles que malloc et free, et l'utilisation de boucles imbriquées pour l'allocation des lignes et des colonnes. De plus, des exemples réels d'allocation dynamique de mémoire pour des tableaux de structures et de pointeurs seront abordés pour te permettre d'acquérir une compréhension pratique. L'article se penchera également sur les avantages et les défis associés à l'allocation dynamique, en se concentrant sur les avantages, les problèmes potentiels et les solutions. À la fin de ce guide complet, tu auras acquis une solide connaissance de l'allocation dynamique des tableaux en C, ce qui te permettra d'améliorer tes compétences en programmation et ton efficacité en matière de gestion de la mémoire.

C'est parti

Des millions de fiches spécialement conçues pour étudier facilement

Inscris-toi gratuitement
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quelles sont les fonctions les plus courantes pour l'allocation de mémoire en C ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quel est le but de la fonction free en C ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quelles sont les étapes clés pour allouer de la mémoire à un tableau 1D à l'aide de malloc en C ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quelles sont les étapes clés pour allouer de la mémoire à un tableau 2D à l'aide de malloc en C ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Comment accéder aux éléments d'un tableau 2D alloué dynamiquement ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quel est le but de l'allocation dynamique de la mémoire pour les tableaux en C ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quelle est la première étape de l'allocation dynamique de la mémoire pour un tableau de pointeurs ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Comment accéder aux valeurs d'un tableau de pointeurs après lui avoir alloué dynamiquement de la mémoire ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quelle est la première étape pour allouer dynamiquement de la mémoire à un tableau de structures ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Comment peux-tu accéder aux éléments d'un tableau de structures alloué dynamiquement ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quels sont les avantages de l'allocation dynamique de la mémoire en C ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quelles sont les fonctions les plus courantes pour l'allocation de mémoire en C ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quel est le but de la fonction free en C ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quelles sont les étapes clés pour allouer de la mémoire à un tableau 1D à l'aide de malloc en C ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quelles sont les étapes clés pour allouer de la mémoire à un tableau 2D à l'aide de malloc en C ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Comment accéder aux éléments d'un tableau 2D alloué dynamiquement ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quel est le but de l'allocation dynamique de la mémoire pour les tableaux en C ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quelle est la première étape de l'allocation dynamique de la mémoire pour un tableau de pointeurs ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Comment accéder aux valeurs d'un tableau de pointeurs après lui avoir alloué dynamiquement de la mémoire ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quelle est la première étape pour allouer dynamiquement de la mémoire à un tableau de structures ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Comment peux-tu accéder aux éléments d'un tableau de structures alloué dynamiquement ?

Afficer la réponse
  • + Add tag
  • Immunology
  • Cell Biology
  • Mo

Quels sont les avantages de l'allocation dynamique de la mémoire en C ?

Afficer la réponse

Des millions de fiches spécialement conçues pour étudier facilement
Des millions de fiches spécialement conçues pour étudier facilement

Upload Icon

Create flashcards automatically from your own documents.

   Upload Documents
Upload Dots

FC Phone Screen

Need help with
Allocation dynamique de tableau en C?
Ask our AI Assistant

Review generated flashcards

Inscris-toi gratuitement
Tu as atteint la limite quotidienne de l'IA

Commence à apprendre ou crée tes propres flashcards d'IA

Équipe éditoriale StudySmarter

Équipe enseignants Allocation dynamique de tableau en C

  • Temps de lecture: 16 minutes
  • Vérifié par l'équipe éditoriale StudySmarter
Sauvegarder l'explication Sauvegarder l'explication
Tables des matières
Tables des matières

Sauter à un chapitre clé

    Comprendre l'allocation dynamique de tableau en C

    En programmation informatique, l'allocation dynamique de tableau peut être un outil puissant qui te permet de gérer efficacement la mémoire et d'augmenter la flexibilité de ton code. Dans le langage C, l'allocation dynamique te permet de créer des tableaux de taille variable en fonction des besoins d'exécution. Cet article se concentre sur l'allocation dynamique des tableaux 1D (unidimensionnels) et 2D (bidimensionnels) et fournit des concepts et des exemples utiles pour travailler avec eux.

    Allocation dynamique d'un tableau 1D en C

    La création d'un tableau unidimensionnel à l'aide de l'allocation dynamique implique l'utilisation de pointeurs et de fonctions d'allocation de mémoire. Les fonctions les plus courantes pour l'allocation de mémoire en C sont malloc et calloc, malloc étant au centre de la discussion dans cette section. La fonction free sera également abordée pour libérer la mémoire une fois qu'elle n'est plus nécessaire.

    Allocation de mémoire à l'aide de malloc

    L'allocation dynamique à l'aide de malloc (allocation de mémoire) te permet d'allouer de la mémoire pendant l'exécution du programme. En utilisant malloc, tu peux créer un bloc de mémoire pour stocker les éléments d'un tableau. Pour allouer de la mémoire à un tableau, suis les étapes suivantes :

    1. Déclare un pointeur qui pointera sur le premier élément du tableau 1D.
    2. Utilise malloc pour allouer de la mémoire pour le nombre d'éléments désiré
    3. Attribue au pointeur l'adresse du bloc de mémoire renvoyé par malloc.
    4. Accède aux éléments du tableau et manipule-les à l'aide du pointeur.

    Voici un exemple en C :

    
    #include #include int main() { int n, i ; int *array ; printf("Entrez le nombre d'éléments : ") ; scanf("%d", &n) ; array = (int*) malloc(n * sizeof(int)) ; if (array == NULL) { printf("Memory allocation failed !") ; return -1 ; } for (i = 0 ; i < n ; i++) { printf("Enter element %d : ", i) ; scanf("%d", &array[i]) ; } printf("Array elements : ") ; for (i = 0 ; i < n ; i++) { printf("%d ", array[i]) ; } return 0 ; }

    Fonction malloc : La fonction malloc est utilisée pour allouer un bloc de mémoire d'une taille spécifiée. Elle renvoie un pointeur void sur le premier octet de la mémoire allouée. Si l'allocation échoue, elle renvoie NULL.

    Libération de la mémoire avec la fonction Free

    Lorsque la mémoire allouée dynamiquement n'est plus nécessaire, tu dois la libérer afin de libérer des ressources et d'éviter les fuites de mémoire. La fonction free est utilisée à cette fin :

    
    free(array) ;

    N'oublie jamais de libérer la mémoire allouée à l'aide de malloc une fois qu'elle n'est plus nécessaire.

    Allocation dynamique d'un tableau 2D en C

    L'allocation dynamique d'un tableau à deux dimensions implique d'allouer de la mémoire à la fois pour les lignes et les colonnes. En C, tu peux utiliser des boucles imbriquées pour allouer de la mémoire à un tableau 2D et accéder à ses éléments. Cette section décrit les étapes à suivre pour allouer de la mémoire à un tableau à deux dimensions et pour accéder à ses éléments.

    Utilisation d'une boucle imbriquée pour l'allocation des lignes et des colonnes

    Voici les étapes à suivre pour allouer de la mémoire à un tableau 2D :

    1. Déclare un pointeur sur un pointeur qui contient l'adresse de base du tableau 2D.
    2. Alloue de la mémoire pour les lignes à l'aide de malloc.
    3. Pour chaque ligne, alloue de la mémoire pour les colonnes à l'aide de malloc
    4. Attribue les adresses aux pointeurs de ligne

    Voici un exemple en C :

    
    #include #include int main() { int **array ; int rows, cols, i, j ; printf("Entrez le nombre de lignes : ") ; scanf("%d", &rows) ; printf("Entrez le nombre de colonnes : ") ; scanf("%d", &cols) ; array = (int**) malloc(rows * sizeof(int*)) ; if (array == NULL) { printf("Memory allocation failed !") ; return -1 ; } for (i = 0 ; i < rows ; i++) { array[i] = (int*) malloc(cols * sizeof(int)) ; if (array[i] == NULL) { printf("Memory allocation failed !") ; return -1 ; } } printf("Entrez les éléments du tableau 2D:\n") ; for (i = 0 ; i < rows ; i++) { for (j = 0 ; j < cols ; j++) { scanf("%d", &array[i][j]) ; } } printf("2D array elements :\N") ; for (i = 0 ; i < rows ; i++) { for (j = 0 ; j < cols ; j++) { printf("%d ", array[i][j]) ; } printf("\N") ; } return 0 ; }

    Accès aux éléments des tableaux 2D

    Après avoir alloué de la mémoire à un tableau 2D, tu peux accéder à ses éléments et les manipuler en utilisant des boucles imbriquées et l'indexation du tableau :

    
    for (i = 0 ; i < rows ; i++) { for (j = 0 ; j < cols ; j++) { // Accède à l'élément à array[i][j] } }.

    En résumé, l'allocation dynamique des tableaux en C constitue un moyen puissant de gérer la mémoire et de travailler avec des structures de données de tailles variables. En comprenant comment utiliser malloc et free, ainsi que les boucles imbriquées pour les tableaux 2D, tu peux créer des programmes flexibles et efficaces qui exploitent au mieux la mémoire disponible et les ressources du système.

    Allocation dynamique d'un tableau en C Exemples

    Dans cette section, nous allons explorer un exemple qui démontre l'utilisation de l'allocation dynamique de la mémoire pour un tableau de pointeurs en C. Ce concept peut être utile dans les situations où tu dois travailler avec un tableau de pointeurs vers différents types de données ou différentes structures de données. Cet exemple se concentre sur un tableau de pointeurs sur des nombres entiers.

    Considère un scénario dans lequel tu dois stocker les adresses de plusieurs variables entières dans un tableau. Tu peux utiliser un tableau de pointeurs sur des entiers et lui allouer dynamiquement de la mémoire. Pour ce faire, applique les étapes suivantes :

    1. Déclare un pointeur sur le tableau de pointeurs.
    2. Alloue de la mémoire pour le nombre désiré de pointeurs à l'aide de malloc.
    3. Attribue au pointeur l'adresse du bloc de mémoire renvoyé par malloc.
    4. Initialise les éléments du tableau avec les adresses des variables souhaitées.
    5. Accède et manipule les valeurs pointées par chaque pointeur dans le tableau en utilisant l'index du tableau et l'opérateur de déréférencement (*).

    Voici l'exemple en C :

    
    #include #include int main() { int n, i ; int **ptrArray ; printf("Entrez le nombre de pointeurs : ") ; scanf("%d", &n) ; ptrArray = (int**) malloc(n * sizeof(int*)) ; if (ptrArray == NULL) { printf("Memory allocation failed !") ; return -1 ; } for (i = 0 ; i < n ; i++) { int temp ; printf("Enter value %d : ", i) ; scanf("%d", &temp) ; ptrArray[i] = (int*) malloc(sizeof(int)) ; *ptrArray[i] = temp ; } printf("Valeurs stockées dans le tableau de pointeurs:\n") ; for (i = 0 ; i < n ; i++) { printf("%d ", *ptrArray[i]) ; } return 0 ; }

    Dans l'exemple ci-dessus, nous allouons d'abord de la mémoire pour un tableau de pointeurs d'entiers, puis nous allouons de la mémoire pour chaque pointeur afin de stocker un entier. Nous lisons les valeurs de l'utilisateur et les stockons dans les emplacements de mémoire alloués. Enfin, nous affichons les valeurs en accédant aux éléments du tableau de pointeurs et en utilisant l'opérateur de déréférencement (*) pour récupérer la valeur stockée.

    Exemple d'allocation dynamique de mémoire pour un tableau de structures en C

    Une autre utilisation pratique de l'allocation dynamique de la mémoire en C est la création d'un tableau de structures. Un tableau de structures contient des éléments, où chaque élément est une instance d'une structure spécifique. En utilisant l'allocation dynamique de la mémoire, la taille du tableau peut être déterminée pendant l'exécution. Dans cette section, nous allons explorer un exemple d'allocation dynamique d'un tableau de structures.

    Considérons une structure de données appelée "Étudiant" qui stocke les informations relatives à l'étudiant, telles que son nom et son numéro de matricule. Voici les étapes à suivre pour créer et manipuler un tableau de structures Étudiant à l'aide de l'allocation dynamique de la mémoire :

    1. Définis la structure Étudiant
    2. Déclare un pointeur sur le tableau des structures Étudiant
    3. Alloue de la mémoire pour le nombre désiré de structures Étudiant à l'aide de malloc
    4. Attribue au pointeur l'adresse du bloc de mémoire renvoyé par malloc
    5. Accède aux éléments du tableau de structures et manipule-les en utilisant l'index du tableau et l'opérateur d'accès aux membres de la structure (.).

    Voici l'exemple en C :

    
    #include #include #include typedef struct { char name[50] ; int roll ; } Student ; int main() { int n, i ; Student *studentArray ; printf("Entrez le nombre d'étudiants : ") ; scanf("%d", &n) ; studentArray = (Student*) malloc(n * sizeof(Student)) ; if (studentArray == NULL) { printf("Memory allocation failed !") ; return -1 ; } for (i = 0 ; i < n ; i++) { printf("Enter student %d name : ", i) ; scanf("%s", studentArray[i].name) ; printf("Enter student %d roll number : ", i) ; scanf("%d", &studentArray[i].roll) ; } printf("Student information:\n") ; for (i = 0 ; i < n ; i++) { printf("Student %d : %s, Roll number : %d\n", i, studentArray[i].name, studentArray[i].roll) ; } return 0 ; }.

    Dans l'exemple ci-dessus, nous définissons d'abord la structure Étudiant, puis nous allouons de la mémoire pour un tableau de structures Étudiant en fonction du nombre d'étudiants souhaité. Nous lisons les informations sur l'élève à partir de l'utilisateur et les stockons dans chaque élément du tableau de structures. Enfin, nous imprimons les informations sur les élèves.

    En conclusion, les exemples fournis montrent comment tu peux utiliser l'allocation dynamique de la mémoire pour créer un tableau de pointeurs et un tableau de structures en C. Ces concepts te donnent un plus grand contrôle sur la gestion de la mémoire et la flexibilité de redimensionner les tableaux en fonction des exigences d'exécution.

    Avantages et défis de l'allocation dynamique de tableaux en C

    L'allocation dynamique de tableaux en langage C peut offrir de nombreux avantages tels qu'une utilisation efficace de la mémoire, une flexibilité accrue et un meilleur contrôle du comportement du programme lors de son exécution. Cependant, elle s'accompagne également de problèmes potentiels qui peuvent entraîner des fuites de mémoire, une fragmentation et bien d'autres choses encore. Cette section traite des avantages et des problèmes potentiels liés à l'utilisation de l'allocation dynamique des tableaux en C et propose des solutions pour surmonter ces défis.

    Avantages de l'allocation dynamique de la mémoire

    L'allocation dynamique de la mémoire permet aux développeurs de gérer plus efficacement les ressources du système et offre plusieurs avantages :

    • Flexibilité : Avec l'allocation dynamique, la taille des tableaux peut être déterminée pendant l'exécution, ce qui te permet de créer des tableaux qui s'adaptent aux exigences de ton programme et des données d'entrée.
    • Efficacité de la mémoire : L'allocation dynamique de la mémoire garantit que seule la quantité de mémoire nécessaire est utilisée, ce qui réduit le gaspillage de mémoire. Ceci est particulièrement utile dans les situations où la taille des tableaux peut varier de manière significative ou lorsque la taille de la mémoire requise est inconnue au moment de la compilation.
    • Gestion des données : L'allocation dynamique aide à gérer les structures de données complexes, telles que les listes chaînées, les arbres et les graphiques, qui peuvent croître ou décroître au moment de l'exécution. En utilisant l'allocation dynamique de la mémoire, tu peux stocker et manipuler les données plus efficacement.
    • Contrôle de l'allocation et de la désallocation : La mémoire peut être allouée et désallouée selon les besoins pendant l'exécution du programme, ce qui permet de mieux contrôler le temps d'exécution du programme et la gestion des ressources.

    Problèmes potentiels et solutions en matière d'allocation dynamique

    Malgré ses avantages, l'allocation dynamique de la mémoire en C peut entraîner des problèmes et des défis potentiels :

    EnjeuDescription du problèmeSolution
    Fuites de mémoireLa mémoire allouée qui ne sert plus à rien et qui n'est pas désallouée est appelée fuite de mémoire. Les fuites de mémoire peuvent entraîner une dégradation des performances et une réduction de la mémoire disponible.Désalloue toujours la mémoire qui a été allouée dynamiquement à l'aide de 'free()' lorsqu'elle n'est plus nécessaire.
    Fragmentation de la mémoireLa fragmentation de la mémoire se produit lorsque de petits espaces de mémoire inutilisée sont créés entre les blocs de mémoire alloués, ce qui entraîne une utilisation inefficace de la mémoire. Cela se produit lorsque la mémoire est continuellement allouée et désallouée selon des tailles variables.Minimise la fragmentation de la mémoire en allouant et en désallouant la mémoire dans des tailles fixes ou en réallouant la mémoire pendant l'exécution uniquement lorsque cela est nécessaire.
    Erreurs d'allocationLes fonctions d'allocation de mémoire renvoient NULL lorsque l'allocation échoue, souvent en raison d'une mémoire insuffisante ou d'une erreur d'allocation de mémoire.Vérifie toujours la valeur de retour des fonctions d'allocation comme 'malloc()' ou 'calloc()' pour t'assurer que la mémoire a été allouée avec succès.
    Accès à la mémoire non allouéeL'accès à une mémoire qui n'a pas été allouée ou qui a déjà été désallouée peut produire un comportement indéfini, entraînant des plantages ou un comportement incorrect du programme.Assure-toi que tu accèdes toujours à une mémoire qui se trouve dans la plage de mémoire allouée et qui n'a pas été désallouée.

    En comprenant les avantages et les défis de l'allocation dynamique des tableaux en C, tu peux tirer pleinement parti de ses fonctionnalités et créer des programmes plus efficaces, plus souples et plus puissants tout en évitant les problèmes potentiels. Une bonne gestion de l'allocation et de la désallocation de la mémoire, associée à de bonnes pratiques de programmation, peut t'aider à minimiser les risques et à tirer le meilleur parti de l'allocation dynamique de la mémoire dans ton code.

    Allocation dynamique d'un tableau en C - Principaux enseignements

    • Allocation dynamique d'un tableau en C : Permet de créer des tableaux de taille variable en fonction des besoins d'exécution, ce qui améliore la gestion de la mémoire et la flexibilité du code.

    • Allocation dynamique d'un tableau 1D en C : Implique l'utilisation de pointeurs, de fonctions d'allocation de mémoire (par exemple malloc) et de la fonction free pour désallouer la mémoire.

    • Allocation dynamique d'un tableau 2D en C : Consiste à allouer de la mémoire pour les lignes et les colonnes à l'aide de boucles imbriquées, ce qui offre un meilleur contrôle sur les structures de données bidimensionnelles.

    • Allocation dynamique de la mémoire pour les tableaux de pointeurs et les tableaux de structures en C : Améliore la capacité à gérer des types de données et des structures complexes qui peuvent croître ou décroître au moment de l'exécution.

    • Défis et solutions en matière d'allocation dynamique : La prise de conscience des problèmes potentiels tels que les fuites de mémoire, la fragmentation, les erreurs d'allocation et l'accès à la mémoire non allouée, aide à développer des programmes efficaces et robustes.

    Allocation dynamique de tableau en C Allocation dynamique de tableau en C
    Apprends avec 15 fiches de Allocation dynamique de tableau en C dans l'application gratuite StudySmarter
    S'inscrire avec un e-mail

    Tu as déjà un compte ? Connecte-toi

    Questions fréquemment posées en Allocation dynamique de tableau en C
    Qu'est-ce que l'allocation dynamique de tableau en C ?
    L'allocation dynamique de tableau en C permet de créer des tableaux dont la taille peut être modifiée pendant l'exécution grâce à des fonctions comme malloc, calloc et realloc.
    Comment allouer un tableau dynamique en C ?
    Pour allouer un tableau dynamique, utilisez malloc pour réserver de la mémoire: `int* tableau = (int*)malloc(taille * sizeof(int));`.
    Comment libérer un tableau alloué dynamiquement en C ?
    Pour libérer la mémoire d'un tableau dynamique, utilisez free: `free(tableau);`.
    Quand utiliser l'allocation dynamique de tableau en C ?
    Utilisez l'allocation dynamique lorsque la taille du tableau n'est pas connue à l'avance ou peut changer en cours d'exécution.
    Sauvegarder l'explication

    Teste tes connaissances avec des questions à choix multiples

    Quelles sont les fonctions les plus courantes pour l'allocation de mémoire en C ?

    Quel est le but de la fonction free en C ?

    Quelles sont les étapes clés pour allouer de la mémoire à un tableau 1D à l'aide de malloc en C ?

    Suivant

    Découvre des matériels d'apprentissage avec l'application gratuite StudySmarter

    Lance-toi dans tes études
    1
    À propos de StudySmarter

    StudySmarter est une entreprise de technologie éducative mondialement reconnue, offrant une plateforme d'apprentissage holistique conçue pour les étudiants de tous âges et de tous niveaux éducatifs. Notre plateforme fournit un soutien à l'apprentissage pour une large gamme de sujets, y compris les STEM, les sciences sociales et les langues, et aide également les étudiants à réussir divers tests et examens dans le monde entier, tels que le GCSE, le A Level, le SAT, l'ACT, l'Abitur, et plus encore. Nous proposons une bibliothèque étendue de matériels d'apprentissage, y compris des flashcards interactives, des solutions de manuels scolaires complètes et des explications détaillées. La technologie de pointe et les outils que nous fournissons aident les étudiants à créer leurs propres matériels d'apprentissage. Le contenu de StudySmarter est non seulement vérifié par des experts, mais également régulièrement mis à jour pour garantir l'exactitude et la pertinence.

    En savoir plus
    Équipe éditoriale StudySmarter

    Équipe enseignants Informatique

    • Temps de lecture: 16 minutes
    • Vérifié par l'équipe éditoriale StudySmarter
    Sauvegarder l'explication Sauvegarder l'explication

    Sauvegarder l'explication

    Inscris-toi gratuitement

    Inscris-toi gratuitement et commence à réviser !

    Rejoins plus de 22 millions d'étudiants qui apprennent avec notre appli StudySmarter !

    La première appli d'apprentissage qui a réunit vraiment tout ce dont tu as besoin pour réussir tes examens.

    • Fiches & Quiz
    • Assistant virtuel basé sur l’IA
    • Planificateur d'étude
    • Examens blancs
    • Prise de notes intelligente
    Rejoins plus de 22 millions d'étudiants qui apprennent avec notre appli StudySmarter !