diff --git a/C11.1.c b/C11.1.c new file mode 100644 index 0000000..5dc7ff3 --- /dev/null +++ b/C11.1.c @@ -0,0 +1,11 @@ +#include + +int main(){ + + int x = 42; + + // Le cast déclenche un warning, et effectivement, un poiteur vers un entier et un entier représentent deux choses différentes. + printf("La variable dénotée 'x' contient la valeur %d stoquée à l'adresse %d\n",x,(int)&x); + + return 0; +} diff --git a/C11.5.c b/C11.5.c new file mode 100644 index 0000000..1d964b9 --- /dev/null +++ b/C11.5.c @@ -0,0 +1,18 @@ +#include +#include + +void swap(int* a, int* b){ + + int c = *a; + *a = *b; + *b = c; + +} + +int main(){ + int a, b, olda, oldb; + scanf("%i %i", &a, &b); + olda = a; oldb = b; + swap(&a, &b); + assert(a == oldb && b == olda); +} diff --git a/C11.md b/C11.md new file mode 100644 index 0000000..0d8bf63 --- /dev/null +++ b/C11.md @@ -0,0 +1,43 @@ +#C 11 + +### Exercice 2 +Description ligne par ligne du programme: + +1. la case mémoire 'a' prend la valeur 3 +2. la case mémoire 'p1' prend en valeur l'adresse de la case mémoire 'a' +3. la case mémoire 'b' prend la valeur stoquée dans 'a' (donc 3) +4. la case mémoire 'p2' prend en valeur l'adresse de la case mémoire 'b' (différente de celle de 'a') +5. la case mémoire 'a' prend la valeur 5 +6. la valeur stoquée dans la case mémoire dont l'adresse est stoquée en case 'p1' (donc 'a') est incrémentée (passe de 5 à 6) +7. la case mémoire 'b' prend la valeur 8 +8. la case mémoire dont l'adresse est stoquée en 'p2' (donc 'b') prend la valeur 12. +9. la case mémoire 'p1' prend pour valeur l'adresse stoquée dans la case mémoire 'p2' (donc l'adresse de 'b') +10. la case mémoire dont l'adresse est stoquée en 'p1' (donc 'b' maintenant) prend la valeur 15. + +État final: p1=p2=&b et a=6 et b=15 + +### Exercice 3 +Ce programme produit des *warnings* à la compilation sur des erreurs de cast. En effet, un pointeur vers un flottant (&x) essaye de rentrer dans un pointeur vers un flottant, ce qui a techinquement la même taille, mais qui exprime souvent une erreur de conception. + +Sinon, le programme affiche l'entier représenté par la suite de bits corerspondant à la représentaton en binaire du flotant 2.4. En l'ocurence `1075419546`. + +### Exercice 4 + +Description ligne par ligne du programme: + +1. Une case 'a' est réservée à un entier. +2. L'adresse de 'a' est stoquée dans une autre case mémoire 'addr' +3. Une nouvelle case memoire est créee pour y stoquer le resultat de l'appel à la fonction + +f +0. Le paramètre est passée en valeur. Ce qui signifie que x contient la valeur qui lui a été donnée en paramètre, donc l'adresse de la case mémoire 'a'. +1. La valeur contenue dans la case mémoire dont l'adresse est stoquée dans la case mémoire 'x' est définie à 0. +2. La case mémoire 'x' est définie à 0 (ne pointe plus vers aucune case mémoire) (le pointeur NULL). +3. Renvoie la valeur présente dans la case mémoire 'x'. + +Donc a=0, addr=&a, addr2=NULL. + +### Exercice 6 + +`scanf` prend des pointeurs afin de pouvoir «retourner» plusieurs valeurs. Avec des valeurs, on aurait accès qu'à la valeur de retour de scanf, pas très utile. + diff --git a/C12.c b/C12.c new file mode 100644 index 0000000..e9e9cc3 --- /dev/null +++ b/C12.c @@ -0,0 +1,71 @@ + +#include +#include +#include + +#define N 5 +#define NumLength (10+4+1) +#define IntLength (8) + +typedef struct personne personne; +struct personne{ + int age; + char* initiales; + char* num; +}; + +void description(personne* p){ + + printf("%s, agé de %d ans est joignable au %s \n",p->initiales, p->age, p->num); + +} + +void demander(personne* p){ + + int age; + char initiales[IntLength]; + char num[NumLength]; + + printf("Création d'une nouvelle personne : \n"); + printf("Initiales : "); + scanf("%s", initiales); + printf("Âge : "); + scanf("%d", &age); + printf("Numéro de téléphone : "); + scanf("%s", num); + + p->initiales = initiales; + p->age = age; + p->num = num; + +} + +int lesmeme(personne* p1, personne* p2){ + + return (p1->age==p2->age) && (strcmp(p1->initiales, p2->initiales)==0) && (strcmp(p1->num, p2->num)==0); + +} + + +int main(){ + + personne persos[N]; + + for(int i=0;i +#include + + +int main(){ + + int n; + + printf("Nombre de valeurs : "); + scanf("%d", &n); + + int* vals = (int*)malloc(n*sizeof(int)); + + for(int i=0;i +#include + +int** zerosMat(int h, int w){ + int** arr = (int**)malloc(h*sizeof(int*)+1); + if(arr==NULL)return NULL; + + for(int i=0;i