Declaration d'un pointeur

dali -  
 dali81 -
onjour tout le monde,

j'ai écrit un code qui permet de generer un vecteur aleatoire d'entiers entre 1 et 10, mais ça fonctionne pas je pense a cause de la declaration du pointeur :

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

int i,buffer,position;
int *p;
*p=0;

for(i=0;i<10;i++)
{
*(p+i)=i+1;
}

for(i=0;i<10;i++)
{
position=random()%10;
buffer=*(p+i);
*(p+i)=*(p+position);
*(p+position)=buffer;
}

for(i=0;i<10;i++)
printf("%i ", *(p+i));

return EXIT_SUCCESS;
}

2 réponses

  1. SKZ81
     
    Oui c'est normal...

    int *p;

    Là tu dis que p est un pointeur. Mais un pointeur sur quoi ? Qu'est-ce qu'une flèche sans cible ???

    Bref, il faut que le pointeur pointe vers une zone mémoire. Pas trop le choix, deux solutions.
    - Soit c'est un pointeur qui sert à manipuler une zone mémoire existante (ex : j'ai un pointeur qui pointe en début de liste, et je veux me balader dans la liste sans perdre l'origine).

    - Soit c'est un pointeur qui est destiné à gérer une nouvelle zone mémoire à par entière, l'exemple de ton tableau de 10 éléments est parfais.

    Dans le deuxième cas, il faut que tu demande au système un bout de mémoire.
    Celà se fait par la fonction malloc().

    Tu veux 10 éléments, ses éléments sont des entier ?
    Alors il faut que tu réserve, auprès du système, un bloc mémoire de 10 fois la taille d'un entier.
    En C, on écrit :
    malloc( 10 * sizeof(int) );

    Et les choses sont bien faites puisque malloc te renvoit un pointeur, qui pointe vers la zone mémoire alloué.

    il faut donc écrire

    int *p = malloc( 10*sizeof(int) );

    Et AINSI p pointe vers un tableau de 10 éléments entiers.

    OK ? Si il n'y a pas d'autre erreur, ton code devrais rouler comme ça.
    0
  2. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    int *p = (int*)malloc(10*sizeof(int))

    ++
    0
    1. dali81
       
      merciiiiiiiiiiiiii;

      ça marche, je connaissais pas cette commande
      0