Declaration d'un pointeur
dali
-
dali81 -
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;
}
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;
}
A voir également:
- Declaration d'un pointeur
- Déclaration - Guide
- En plus des revenus, il ne faut surtout pas oublier de faire cette déclaration en ligne aux impôts - Guide
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- L'erreur qui peut coûter cher : il ne faut pas déclarer ces revenus aux impôts - Guide
2 réponses
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.
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.