Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <limits.h>
- int* testfct() {
- int* test = malloc(4 * sizeof(int));
- test[0] = 1;
- test[1] = 2;
- test[2] = 3;
- test[3] = 4;
- return test;
- }
- int main2() {
- int* test = testfct();
- printf("%d\n", test[0]);
- printf("%d\n", test[1]);
- printf("%d\n", test[2]);
- printf("%d\n", test[3]);
- }
- void add_one(int* i) {
- // modifie pas i, mais ce vers quoi pointe i
- // Donc va bien modifier "l'original" (la valeur qu'on
- // a malloc) !!! = utilité des pointeurs
- *i = *i + 1;
- }
- /*
- Sans pointeurs :
- on a int a = 5
- copié en int i dans l'appel de la fonction
- et la fonction agit sur i, donc ne modifie pas a.
- Avec pointeurs :
- On a un int* a qui pointe vers un int égal à 5
- On copie (int* a) en (int* i), donc ce sont deux variables
- locales qui pointent vers la même chose
- et donc modifier vers quoi pointe i va modifier vers quoi
- pointe a !
- -> la fct a fait qqchose, pas besoin de return
- */
- int main() {
- int* a = malloc(sizeof(int));
- *a = 5;
- printf("%d\n", *a);
- add_one(a);
- printf("%d\n", *a);
- // on peut aussi faire ça :
- int b = 6;
- printf("%d\n", b);
- add_one(&b); // &b renvoie un pointeur vers b.
- // vu qu'on appelle b pendant l'exécution de main,
- // la variable locale b n'est pas encore supprimée
- // (le sera à la fin de main) et donc on peut prendre
- // un pointeur vers b sans risque de perdre
- printf("%d\n", b);
- free(a);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement