Advertisement
iSach

Untitled

Dec 28th, 2023
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4.  
  5. int* testfct() {
  6. int* test = malloc(4 * sizeof(int));
  7. test[0] = 1;
  8. test[1] = 2;
  9. test[2] = 3;
  10. test[3] = 4;
  11. return test;
  12. }
  13.  
  14. int main2() {
  15. int* test = testfct();
  16. printf("%d\n", test[0]);
  17. printf("%d\n", test[1]);
  18. printf("%d\n", test[2]);
  19. printf("%d\n", test[3]);
  20. }
  21.  
  22. void add_one(int* i) {
  23. // modifie pas i, mais ce vers quoi pointe i
  24. // Donc va bien modifier "l'original" (la valeur qu'on
  25. // a malloc) !!! = utilité des pointeurs
  26. *i = *i + 1;
  27. }
  28.  
  29. /*
  30. Sans pointeurs :
  31. on a int a = 5
  32. copié en int i dans l'appel de la fonction
  33. et la fonction agit sur i, donc ne modifie pas a.
  34.  
  35. Avec pointeurs :
  36. On a un int* a qui pointe vers un int égal à 5
  37. On copie (int* a) en (int* i), donc ce sont deux variables
  38. locales qui pointent vers la même chose
  39. et donc modifier vers quoi pointe i va modifier vers quoi
  40. pointe a !
  41.  
  42. -> la fct a fait qqchose, pas besoin de return
  43. */
  44.  
  45. int main() {
  46. int* a = malloc(sizeof(int));
  47. *a = 5;
  48. printf("%d\n", *a);
  49. add_one(a);
  50. printf("%d\n", *a);
  51.  
  52. // on peut aussi faire ça :
  53. int b = 6;
  54. printf("%d\n", b);
  55. add_one(&b); // &b renvoie un pointeur vers b.
  56. // vu qu'on appelle b pendant l'exécution de main,
  57. // la variable locale b n'est pas encore supprimée
  58. // (le sera à la fin de main) et donc on peut prendre
  59. // un pointeur vers b sans risque de perdre
  60. printf("%d\n", b);
  61.  
  62. free(a);
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement