CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Programmation en C : Pointeurs et Tablea

claona
claona
Niveau 10
25 mars 2010 à 21:59:18

Tableaux*

Je n'arrive pas a comprendre quelque chose ... :(

void maximumTableau(int *tableau, int tailleTableau, int valeurMax)

Dans cette fonction par exemple, on envoie le pointeur tableau en parametre, qui pointe sur la premiere case du tableau.

On envoie donc un chiffre tel que 204043 ( au pif , l'adresse de la premiere case du tableau )

if(tableau[i] > valeurMax)
{
tableau[i] = 0;
}

Mais si par la suite on met cet extrait ( j'ai pas tout mis en entier )
Eh bien ca marche :fou:

Je comprend pas comment avec la valeur 204043, on puisse parcourir les valeurs du tableau :(

De plus tableau[] et *tableau , apparement c'est la meme chose ( alors qu'y a aucune chiffre dans [] :fou: )

alors tableau[] montre l'adresse de la premiere case du tableau :question:

Je crois etre vraiment paumé :fou:

S'il vous plait éclairez moi :svp:

claona
claona
Niveau 10
25 mars 2010 à 22:07:31

Enfin ...

quand on envoie

"int *tableau"

On envoie l'adresse de la premiere case du tableau pas vrai ?

Alors quand dans la fonction ou on a envoyé cette adresse, quand on fait ca :

for (i = 0 ; i < tailleTableau ; i++)
{
printf("%d\n", tableau[i]);
}

le "tableau[i]" signifierais quoi dans ce cas la :question:

En envoyant "int *tableau" , on envoie le tableau en entier finalement ou juste la premiere adresse et dans ce cas je vois pas comment tableau[i] montrerais la valeur de la case [i] ?

J'espere que je me suis un peu mieux expliqué que ci-dessus :hap:

Lapintade
Lapintade
Niveau 30
25 mars 2010 à 22:27:40

Hello

"int* tableau"

signifie "un pointeur vers des ints". Un pointeur pointe vers une seule case memoire, mais par extension tu peux l'utiliser comme un tableau. (tableau[i] est donc bon).
Pour plus de clarté, je te sugère d'ajoute au nom de la variable un symbole qui te fera la difference avec un vrai tableau.

Par exemple

int* pTableau; // Est juste un pointeur
int Tableau[128]; // Est un tableau de 128 elements.

Par contre la ligne ci dessus ( int* pTableau ) n'initialise pas ce pointeur, il fait juste le declarer. A ce moment la, il n'a aucune valeur et pointe vers n'importe quoi.

"En envoyant "int *tableau" , on envoie le tableau en entier finalement ou juste la premiere adresse et dans ce cas je vois pas comment tableau[i] montrerais la valeur de la case [i] ? "

un pointeur, il "pointe" simplement sur une case memoire. Ce n'est donc pas tout le tableau. Juste l'adresse de la première case.

Quand tu ecris "pointeur[i]" le compilateur est capable de convertir cela en "valeur pointée par pointeur + i cases plus loin" (car il sait que le pointeur pointe sur des int, donc il sait allez pointer vers n'importe quel element).
C'est donc la valeur qui est pointée, (et non pas l'adresse du pointeur).
Ca revient au mème que *(pointeur+i)

attreid
attreid
Niveau 5
26 mars 2010 à 08:32:14

Si ma mémoire est bonne, les deux lignes suivantes ne sont pas équivalentes :

void foo(int *array){}
void foo(int array[]){}

Toujours si ma mémoire est bonne, dans le premier cas on peut faire array++, et pas dans le second. A vérifier dans le K&R.

Lapintade
Lapintade
Niveau 30
26 mars 2010 à 10:33:09

Le premier est un pointeur.

Le second est ... je ne sais pas (un tableau peut être ?). J'utilise pas cette notation.

claona
claona
Niveau 10
26 mars 2010 à 16:16:46

Cette phrase m'a bien fais comprendre :

" Quand tu ecris "pointeur[i]" le compilateur est capable de convertir cela en "valeur pointée par pointeur + i cases plus loin" (car il sait que le pointeur pointe sur des int, donc il sait allez pointer vers n'importe quel element).
C'est donc la valeur qui est pointée, (et non pas l'adresse du pointeur).
Ca revient au mème que *(pointeur+i) "

Merci beaucoup Lapintade :)

Lapintade
Lapintade
Niveau 30
27 mars 2010 à 10:33:02

impec :ok:

godrik
godrik
Niveau 30
27 mars 2010 à 18:30:37

de memoire il y a une difference entre int* et int[] en C, une histoire de typage a la con. En pratique on ne rencontre jamais le probleme.

kufa
kufa
Niveau 9
28 mars 2010 à 01:07:19

Il n'y a pas vraiment de difference entre les deux en C89, sauf pour les compilos qui ont l'option pour checker les acces a un array. Par contre lorsqu'on passe un array en parametre d'une fonction, il faut faire gaffe lorsqu'on utilise un sizeof, qui va retourner la taille du pointeur.

Un exemple a mediter:
http://utilitybase.com/paste/28538

Et pour ceux qui ont peur de lire la norme (ou l'on pas), un petit explicatif, certes incomplet, mais sympa tout de meme:
http://en.wikipedia.org/wiki/C_(programming_language)#Array-pointer_interchangeability

kufa
kufa
Niveau 9
28 mars 2010 à 01:08:38

(au passage desole pour le code paste qui a bouffe mes "\n" ..)

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment