Les pointeurs en C

#include <stdio.h>
int main(int argc, char *argv[]){
    /*
        RAPPEL
        pointeur > contenu de pointeur
        *pointeur > pointe à l'adresse qu'on lui a donné.
        &pointeur > adresse du pointeur lui-même
    */
    /* INITIALISATION */
    int chiffre=20;
    int *pointeur= chiffre;//en fait ça n'a aucun interet, cela revient à dire int pointeur=chiffre;
    int *pointeur1 = &chiffre;//là si car on donne juste l'adresse
    int *pointeur2 = &pointeur1;//plus complexe car je donne l'adresse du pointeur1
    int *pointeur3 = pointeur1;//valeur de pointeur1 = adresse de chiffre
    /* AFFICHAGE */
    printf("POINTEURS \n");
    printf("Contenu de ma variable \"chiffre\" : %d\n", chiffre);
    printf("Adresse de chiffre : %d \n", &chiffre);
    printf("\n");
    printf("Valeur contenue dans \"pointeur\" : %d\n", pointeur);
    printf("Adresse de \"pointeur\" : %d\n",&pointeur);
    printf("\"*pointeur\" n'existe pas");//printf("%d\n", *pointeur); retourne une erreur monumentale !!
    printf("\n");
    printf("\n");
    printf("Contenu de \"pointeur1\" : %d\n", pointeur1);
    printf("Contenu de l'adresse donnée à \"pointeur1\" : %d\n", *pointeur1);
    printf("Adresse de \"pointeur1\" : %d\n",&pointeur1);
    printf("\n");
    printf("Valeur contenue dans pointeur2 : %d\n", pointeur2);
    printf("Contenu de l'adresse donnée à \"pointeur2\" : %d\n", *pointeur2);
    printf("Adresse de \"pointeur2\" : %d\n",&pointeur2);
    printf("\n");
    printf("Valeur contenue dans  \"pointeur3\" : %d\n", pointeur3);
    printf("Contenu de l'adresse donnée à \"pointeur3\" : %d\n", *pointeur3);
    printf("Adresse de \"pointeur3\" : %d\n",&pointeur);
    getch();
    return 0;
}

RESULAT :

POINTEURS
Contenu de ma variable « chiffre » : 20
Adresse de chiffre : 2293528

Valeur contenue dans « pointeur » : 20
Adresse de « pointeur » : 2293524
« *pointeur » n’existe pas

Contenu de « pointeur1 » : 2293528
Contenu de l’adresse donné à « pointeur1 » : 20
Adresse de « pointeur1 » : 2293520

Valeur contenue dans pointeur2 : 2293520
Contenu de l’adresse donné à « pointeur2 » : 2293528
Adresse de « pointeur2 » : 2293516

Valeur contenue dans « pointeur3 » : 2293528
Contenu de l’adresse donnée à « pointeur3 » : 20
Adresse de « pointeur3 » : 2293524

P.S : Pour les adresses, si vous ne trouvez pas le même résultat, c’est normal, cela dépend de votre PC, ou plus précisément de votre processeur.

Un peu de maths : Les puissances 1/2

Voyons comment creer un programme de calcul des puissances.
Petit rappel sur les règles de la puissance :

  • x^0 = 1.
  • x^y = x^(y/2)*x^(y/2) si y est pair.
  • x^y=x^(y-1)*x sinon.

Le petit programme qui suit calcule les puissances de 2 :

class puissance{
  static double puissance(double x,int n){
    double reponse;
    if (n==0) {
      reponse=1;
    }else{
      reponse=puissance(x,n/2);
      if(n%2==0){
        reponse=reponse*reponse;//pair
      }else{
        reponse=reponse*reponse*x;//impair
      }
    }
    return reponse;
  }
  public static void main(String[] args) {
    double x;
    for (int i=0; i&lt;=16;i++) {
      x=2;
      System.out.println("2^"+i+" = "+(int)(puissance(x,i)));
    }
  }
}

Résultat sur le terminal :

nerdyprog@nerdycode ~ $ javac puissance.java
nerdyprog@nerdycode ~ $ java puissance
2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256
2^9 = 512
2^10 = 1024
2^11 = 2048
2^12 = 4096
2^13 = 8192
2^14 = 16384
2^15 = 32768
2^16 = 65536

Nous pouvons améliorer ce programme de façon à demander à l’utilisateur de taper le chiffre ainsi que la puissance voulue. Nous verrons ça dans la prochaine partie ! :mrgreen: