Advertisement
JosepRivaille

Teoria bàsica punters

Dec 16th, 2015
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.16 KB | None | 0 0
  1. /*--------------------------Operador New------------------------------*/
  2.  
  3. /* new : Reserva memòria al Heap (zona de memòria dinàmica).
  4.  *       Podem "diferenciar" quatre tipus de new:
  5.  *      1)  Per a una sola dada de tipus bàsic (char, int, bool...)
  6.  *          new int; retorna un punter que el guardem a un int *p_int per exemple.
  7.  *      2)  Per a una taula de tipus bàsics.
  8.  *          new int[10]; retorna un punter a la primera casella de l'espai reservat.
  9.  *      3)  Per a un struct. new structS;
  10.  *      4)  Per a una classe. new ClassC;
  11.  */
  12. #include <iostream>
  13. using namespace std;
  14.  
  15. struct Punt {
  16.     int x, y;
  17. };
  18.  
  19. class Cercle {
  20.     double radi, centre_x, centre_y;
  21. public:
  22.     Cercle(double r, double x, double y)
  23.     : radi(r), centre_x(x), centre_y(y) {}
  24.    
  25.     double con_radi() const { return radi; }
  26. };
  27.  
  28. int main() {
  29.     // (1)
  30.     int *p_int = new int;
  31.     *p_int = 1;
  32.     cout << *p_int << endl;
  33.     // (2)
  34.     int *p_array = new int[10];
  35.     *p_array = 1;
  36.     *(p_array + 3) = 4;
  37.     p_array[5] = 5;
  38.     for (int i = 0; i < 10; ++i) cout << *(p_array + i) << " ";
  39.     cout << endl;
  40.     // (3)
  41.     Punt *p_punt = new Punt;
  42.     p_punt->x = 3;
  43.     p_punt->y = 1;
  44.     cout << p_punt->x << p_punt->y << endl;s
  45.     // (4)
  46.     Cercle *p_cercle = new Cercle(12.3, 5.1, 4.9);
  47.     cout << p_cercle->con_radi() << endl;
  48.     cout << (*p_cercle).con_radi() << endl;
  49. }
  50.  
  51. /*--------------------------Operador Delete---------------------------*/
  52.  
  53. /* L'operador delete allibera (esborra) un espai de memòria reservat previament
  54.  * amb un new, per a no provocar fugues de memòria. Podem distingir 2 versions:
  55.  *      1) Alliberar objectes únics amb delete p;
  56.  *      2) Alliberar taules amb delete[] p;
  57.  */
  58. #include <iostream>
  59. using namespace std;
  60.  
  61. int main() {
  62.     // (1)
  63.     int *p = new int;
  64.     *p = 5;
  65.     cout << *p << endl;
  66.     delete p;
  67.     // (2)
  68.     int *p2 = new int[1000];
  69.     for (int i = 0; i < 1000; ++i) {
  70.         p2[i] = i + 1;
  71.     }
  72.     delete[] p;
  73. }
  74.  
  75.  
  76. /*-------------------Memory leak (Fuga de memòria)--------------------*/
  77.  
  78. /* És dona una fuga de memòria quan reservem espai de memòria que no utilitzem o
  79.  * que ja no necessitarem.
  80.  * Per exemple, si reservem dos cops seguits un espai amb new a *p, p apuntarà
  81.  * a l'espai creat més recent, i haurem perdut l'adreça de memòria del primer
  82.  * espai que hem creat. S'ha d'intentar no reservar espais de memòria innecessaris.
  83.  */
  84.  
  85. #include <iostream>
  86. using namespace std;
  87.  
  88. int main() {
  89.     int *p = new int;
  90.     for (int i = 0; i < 100; ++i) p = new int;
  91.     //En un principi
  92.     //Però si seguim creant espais de memòria sense fer-los servir ni
  93.     //guardant-ne la direcció, només tindrem un punter que apunta a *p,
  94.     //havent malgastat 100 enters reservats.
  95. }
  96.  
  97.  
  98. /*-------------------Exemple: Seqüencia invertida---------------------*/
  99.  
  100. #include <iostream>
  101. using namespace std;
  102.  
  103. struct Stair {
  104.     int valor;
  105.     Stair *anterior;
  106. };
  107.  
  108. int main() {
  109.     int n;
  110.     cin >> n;
  111.     Stair *node = new Stair;
  112.     while (n != 0) {
  113.         Stair *nodeaux = new Stair;
  114.         nodeaux->valor = n;
  115.         nodeaux->anterior = node;
  116.         node = nodeaux;
  117.         cin >> n;
  118.     }
  119.     while (node != 0) {
  120.         cout << node->valor << ' ';
  121.         node = node->anterior;
  122.     }
  123. }
  124.  
  125. //JosepRivaille
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement