Outils pour utilisateurs

Outils du site


developpement:cpp:modern

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
developpement:cpp:modern [2022/12/13 15:24] – [Endianess] sgariepydeveloppement:cpp:modern [2022/12/14 15:46] (Version actuelle) – [Assert] sgariepy
Ligne 250: Ligne 250:
 }; };
 </code> </code>
 +
 +==== Tableau statique ====
 +
 +  * Taille fixe d'éléments d'un même type
 +  * La taille est fixé au moment de la compilation et ne peut pas grandir (sauf C99)
 +  * Les éléments sont stockés de façon séquentielle et en continu
 +  * Chaque élément a son propre emplacement
 +    * Accessible via sa position
 +    * Ont un index de base 0
 +
 +Points importants:
 +
 +  * Les arrays n'est pas un pointeur
 +    * ''<type>[size]'', e.g. ''int arr[]'' est ''int[5]''
 +  * Mais accessible via la syntaxe de pointeurs
 +  * Un array peut être assigné à un tableau
 +    * Le pointeur détient l'adresse du premier élément
 +    * Les autres éléments peuvent être accédés via l'index ou en incrémentant le pointeur
 +
 +<code cpp>
 +int arr1[5];  // tableau non initialisé
 +int arr2[5]{}; // éléments initialisés avec 0
 +int arr3[5]{ 1, 2, 3, 4, 5 }; // initialisé avec les valeurs spécifiés
 +</code>
 +
 +<code>
 +int *p = arr3;
 +*(p + 2) = 800; // Le 3e élément (index 2) aura la valeur 800
 +</code>
 +
 +==== Passer un tableau à une fonction ====
 +
 +<code cpp>
 +void Print(int *ptr, int size) {
 +    for (int i = 0; i < size; ++i) {
 +        std::cout << ptr[i] << ' ';
 +        //std::cout << *(ptr + i) << ' '; // moins lisible, donc la façon précédente est préférable
 +    }
 +}
 +
 +Print(arr3, sizeof(arr3) / sizeof(int));
 +</code>
 +
 +En tant que référence:
 +
 +<code cpp>
 +template<typename T, int size>
 +void Print(T(&ref)[size]) {
 +    for (int i = 0; i < size; ++i) {
 +        std::cout << ref[i] << ' ';
 +    }
 +}
 +
 +int(&ref)[5] = arr3;
 +Print(arr);
 +</code>
 +
  
  
Ligne 884: Ligne 941:
  
 Illustration du Little Endian: Illustration du Little Endian:
- 
-{{:developpement:cpp:little_endian.png|}} 
  
 {{:developpement:cpp:little_endian.png?600|}} {{:developpement:cpp:little_endian.png?600|}}
  
 +Ici on voit que l'adresse du pointeur ''ptr'' est ''0x001FFCC0'' et sa valeur est l'adresse de ''data'', c'est-à-dire ''0x001FFCCC'' Mais dans la mémoire, si on inspecte la valeur à cet endroit, on verra ''CC FC 1F 00''.
  
  
Ligne 3329: Ligne 3384:
   * may or may not cause the program to terminate   * may or may not cause the program to terminate
  
- +<code> 
- +#include <stdexcept> 
 +... 
 +throw std::runtime_error{"An error occured"}; 
 +</code>
  
 ====== I/O and Streams ====== ====== I/O and Streams ======
Ligne 4308: Ligne 4365:
 </code> </code>
  
 +
 +
 +====== Assert ======
 +
 +<code cpp>
 +#include <cassert>
 +...
 +assert(!Empty());
 +</code>
  
  
developpement/cpp/modern.1670941476.txt.gz · Dernière modification : 2022/12/13 15:24 de sgariepy