DOMANDA Puntatori

Nikkplay

Nuovo Utente
6
0
In questo allegato mi potete spiegare perchè la risposta è la terza?
Grazie a tutti.
 

Allegati

  • 5a2a226e-9ce6-4c8f-a676-76b93609f7df.jpg
    5a2a226e-9ce6-4c8f-a676-76b93609f7df.jpg
    61.6 KB · Visualizzazioni: 55

Andretti60

Utente Èlite
6,440
5,091
scusa ma la qualita' della foto e' cosi' scarsa che non riesco a leggere nulla, abbi pieta' dei miei poveri occhi :)
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Scusa eh, ma... copiare e incollare qui il codice (magari formattandolo), richiedeva troppo tempo?
Sul come pubblicarlo, fai riferimento al regolamento della sezione.
 

pabloski

Utente Èlite
2,868
916
In questo allegato mi potete spiegare perchè la risposta è la terza?
Grazie a tutti.

Wow grandissimo. Il tuo professore dev'essere un mattacchione.

Comunque lì fa un uso molto molto hacker-style dei puntatori e relativa aritmetica.

Cioè, parte col definire un vettore b di int e un puntatore q che punta al terzo elemento di b ( cioè allo slot che contiene il numero 3 ).

Poi chiama f passandogli questo puntatore q ( cioè il parametro p = locazione del numero 3 in b ). Però poi guarda che fa f. Prima si porta avanti di altri due slot ( x=p+2 ) andando a puntare allo slot di b corrispondente al numero 5 e successivamente va indietro di 3 slot, ritornando questo valore oltretutto ( return x-3 ).

Cioè alla fine ottieni che f(q) ti dà il puntatore allo slot numero 2 di 2, quello che contiene il numero 2.

A questo punto però, fa un'assegnazione tra i valori contenenuti in f(q) e q ( che ricorda, sono entrambi puntatori ). Cioè *f(q) dice "vai a modificare il valore contenuto nell'area di memoria puntata da f(q)" e =*q ti dice "e mettici dentro il valore contenuto nell'area di memoria puntata da q".

In parole povere, prende lo slot 3 di b ( che contiene il numero 3 ), ne legge il contenuto e va a ficcare questo contenuto nello slot 2 di b ( che contiene 2 ).

Per cui b diventa b=[1,3,3,4,5]....cioè il numero nello slot due viene sovrascritto con quello nello slot 3.

Come dicevo, è una mossa di kung fu con l'ausilio dei puntatori. Se capisci come funziona, non avrai mai più problemi coi puntatori in vita tua.
 
  • Mi piace
Reazioni: fabio93 e Nikkplay

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili