Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-11-2013, 19:00   #1
theUser
Member
 
Iscritto dal: Jul 2007
Messaggi: 108
[C] Passaggio array a funzioni

Sono un po' confuso sull'argomento. Gli array se vengono modificati dalla funzione si devono passare con "&" davanti, giusto? Ma essendo gli array già dei puntatori perchè è necessario? Se poi consideriamo che, almeno con il mio IDE(codeblocks + mingw32, entrambi credo all'ultima versione), non cambia assolutamente niente passando un array come "array" o "&array" la confusione aumenta.
theUser è offline   Rispondi citando il messaggio o parte di esso
Old 28-11-2013, 20:16   #2
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da theUser Guarda i messaggi
Sono un po' confuso sull'argomento. Gli array se vengono modificati dalla funzione si devono passare con "&" davanti
Che vuol dire?

dato un array, ad esempio:
Codice:
int v[3];
v e &v sono equivalenti e valgono l'indirizzo di memoria del primo elemento dell'array.
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 28-11-2013, 20:25   #3
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3984
cmq tu non passi mai un array a una funzione ma sempre e solo un puntatore al primo elemento di esso

e la stessa cosa vale in uscita: ritorni sempre un puntatore, non un array intero: ergo, i dati scritti in memoria in modo contiguo non vengono mai copiati
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 29-11-2013, 12:05   #4
theUser
Member
 
Iscritto dal: Jul 2007
Messaggi: 108
Pensavo che "&array" fosse un puntatore al puntatore "array".
Se mi dite che le due scritture sono equivalenti è tutto chiaro.
theUser è offline   Rispondi citando il messaggio o parte di esso
Old 29-11-2013, 12:11   #5
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da theUser Guarda i messaggi
Pensavo che "&array" fosse un puntatore al puntatore "array".
Se mi dite che le due scritture sono equivalenti è tutto chiaro.
In generale &variabile restituisce l'indirizzo di memoria della variabile. Quindi se v è array di int, e gli int occupano 4 byte in memoria, &v[2] restituisce l'indirizzo del primo dei 4 byte che rappresentano il terzo elemento dell'array. &v[2] equivale a &(v[2]), cioè prima ottengo l'elemento v[2] e poi ne prendo l'indirizzo. Vale anche la seguente: &v[2] == (v + 2), così come v[2] == *(v + 2)
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 29-11-2013, 12:22   #6
theUser
Member
 
Iscritto dal: Jul 2007
Messaggi: 108
Questo tutto chiarissimo, grazie.
&v invece restituisce v? E' un'eccezione oppure ho capito male?
theUser è offline   Rispondi citando il messaggio o parte di esso
Old 29-11-2013, 13:18   #7
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da theUser Guarda i messaggi
Questo tutto chiarissimo, grazie.
&v invece restituisce v? E' un'eccezione oppure ho capito male?
Credo (ne sono sicuro al 99%, di solito uso il C++ alla C++ e non uso gli array ma i std::vector) sia dovuto alla conversione implicita tra array e puntatore (detto anche "decadimento" da alcuni). Infatti v non sarebbe un puntatore, ma un array. Come si vede nell'immagine, se facciamo la stessa operazione su un puntatore vero e proprio il risultato cambia, perchè in quel caso la variabile puntatore contiene un indirizzo, ma a sua volta è salvata in memoria in un altro indirizzo, nello specifico 4 byte dopo l'altra variabile che sta nella stack, che è proprio l'array dichiarato prima di esso:
https://uqqvkq.bn1302.livefilestore....ays.JPG?psid=1

Ultima modifica di vendettaaaaa : 29-11-2013 alle 13:59.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 30-11-2013, 12:06   #8
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Credo (ne sono sicuro al 99%, di solito uso il C++ alla C++ e non uso gli array ma i std::vector) sia dovuto alla conversione implicita tra array e puntatore (detto anche "decadimento" da alcuni). Infatti v non sarebbe un puntatore, ma un array. Come si vede nell'immagine, se facciamo la stessa operazione su un puntatore vero e proprio il risultato cambia, perchè in quel caso la variabile puntatore contiene un indirizzo, ma a sua volta è salvata in memoria in un altro indirizzo, nello specifico 4 byte dopo l'altra variabile che sta nella stack, che è proprio l'array dichiarato prima di esso:
https://uqqvkq.bn1302.livefilestore....ays.JPG?psid=1
Guardando la figura di nuovo e ripensandoci, v == &v perchè i built-in array devono necessariamente essere dimensionati a compile time, visto che vengono allocati nella stack. Quindi l'indirizzo del puntatore al primo elemento (&v) coincide con l'indirizzo del primo elemento (v, o &v[0]). La cosa non vale nell'altro caso perchè il compilatore sa che nella stack deve allocare memoria per un puntatore ad intero (int* p nel mio caso) ma l'oggetto puntato viene creato solo a runtime nella heap e quindi indirizzo del puntatore (&p) e indirizzo del primo elemento (p, o &p[0]) non coincidono. Ci vorrebbe un disegnino per spiegarsi meglio
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 30-11-2013, 18:20   #9
theUser
Member
 
Iscritto dal: Jul 2007
Messaggi: 108
Sono un po' ignorante di questioni sulla memoria
Qualcuno può consigliarmi un link a proposito?
theUser è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Ricarica wireless dinamica fino a 150 kW...
Troppi report invalidi generati dall'IA:...
Furto di identità su scala nazion...
HPE vende i primi sistemi AMD Helios per...
Suno AI nel mirino dell'Antitrust: conte...
Xiaomi avrebbe cancellato il suo prossim...
WINDTRE BUSINESS rinnova l’offerta mobil...
BMW inaugura la fabbrica di batterie da ...
Googlebook apre al modding: bootloader s...
Denuvo non molla, vuole scoprire chi &eg...
Il miglior portatile tuttofare a basso p...
Gli agenti di OpenAI hanno mandato in ti...
Follie Amazon Prime: Zenbook è un...
MicroSD SanDisk in offerta Prime Day: Ul...
Steve Jobs, 15 anni dopo: John Ternus e ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:18.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v