Partage
  • Partager sur Facebook
  • Partager sur Twitter

algorithme

pointeur

18 février 2017 à 22:29:23

Bonsoir, 

Je suis débutante avec le pointeur , svp qui peut m'aider trouver les valeurs suivantes : 

Soit P un pointeur qui "pointe" sur un tableau A d’entiers:


   A[1..9] = {12, 23, 34, 45, 56, 67, 78, 89, 90}

    *P : entier

   P ←A

Quelles valeurs ou adresses fournissent ces expressions:

a- *P+2 =          

b- *(P+2) =                   

c- &P+1 =

d- &A[4]-3=        

e- A+3 =               

f- &A[7]-P  =       

g- P+(*P-10) =      

h- *(P+*(P+8)-A[7]) =        

  • Partager sur Facebook
  • Partager sur Twitter
19 février 2017 à 10:31:58

Bonjour ! C'est bizarre que A commence à l'élément 1. En C, le premier élément de A est toujours A[0]. Bon...

Pour la suite, je te montre les trois premiers.

P ←A signifie, je suppose : P est affecté à A. En C, ça s'écrit P = A. Donc P pointe sur le début du tableau (sur l'élément A[0] si c'est du C, sur l'élément A[1] dans cet exercice visiblement).


*P+2 = la valeur pointée par P additionnée de 2. Quelle est la valeur pointée par P ? En C ce serait A[0]. Dans cet exercice c'est visiblement A[1], auquel le cas le résultat est 12+2 = 14.


*(P+2) = la valeur pointée par le pointeur P+2. Pour un pointeur, l'opération +2 signifie qu'on le décale de 2 cases, donc P+2 pointe sur  l'élément A[2] si c'est du C, ou A[3] si le tableau commence vraiment par l'élément 1, c'est-à-dire 34.


&P est l'adresse du pointeur P, donc &P+1 est l'adresse de la case suivante, c'est-à-dire l'adresse de A[1] si c'est du C, ou de A[2] dans cet exercice.


Etc.



-
Edité par robun 19 février 2017 à 10:32:59

  • Partager sur Facebook
  • Partager sur Twitter
19 février 2017 à 13:34:43

Bonjour,

pourquoi pas le traduire en code?

http://ideone.com/JTPKIl

  • Partager sur Facebook
  • Partager sur Twitter
19 février 2017 à 15:45:25

Pour comprendre comment ça marche.

  • Partager sur Facebook
  • Partager sur Twitter
19 février 2017 à 20:44:16

Merciii pour vos réponses et surtout robun pour l'explication.

Au contraire du langage C, dans l'algorithme le compteur commence par 1..

j'ai essayé à compléter l'exercice , svp qui peut me le corriger :

a- *P+2 = 14          

b- *(P+2) = 34

c- &P+1= &A[2]

d- &A[4]-3 =  &A[1]    

e- A+3 =   &A[3]            

f- &A[7]-P = &A[6]    

g- P+(*P-10) = &A[3]                 

h- *(P+*(P+8)-A[7]) = *(P+90 - 78) = *(P+12)????       

  • Partager sur Facebook
  • Partager sur Twitter
19 février 2017 à 21:08:31

Je les ai tous regardés sauf le h (trop compliqué pour moi), et je trouve pareil. Ah non, pour le e j'ai &A[4] (mais je me suis peut-être trompé). Et pour le f j'ai la valeur 6. (Mais j'ai regardé ça vite fait.)

Finalement j'ai regardé le h et je trouve moi aussi *(P+12), donc la réponse est : segmentation fault !

-
Edité par robun 20 février 2017 à 8:58:26

  • Partager sur Facebook
  • Partager sur Twitter
19 février 2017 à 21:44:36

ok merci, je vais revérifier .
  • Partager sur Facebook
  • Partager sur Twitter