Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
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: 3741
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


Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
Iliad: si consolida la partnership tecno...
Il SoC a 2 nm di Samsung non sfigura nel...
Prezzo shock per i Galaxy Buds FE + nuov...
Il nuovo SoC di Qualcomm vuole stupire: ...
Offerta lampo per pulire l'auto: aspirap...
I robotaxi di Amazon entrano in azione: ...
ECOVACS DEEBOT T50 PRO OMNI Gen2 domina ...
iPhone 17 Pro su Amazon: tutti i colori,...
Disney Plus da 2,99 euro al mese per 3 m...
Nuovo test di accensione dei motori per ...
Novità dalle analisi dell'asteroi...
La PS6 sarà più potente del previsto: ec...
Sony svela Xperia 10 VII: è il nu...
Amazon Weekend da urlo: iPhone 16 a prez...
Spotify diffida ReVanced: chiesta la rim...
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: 17:20.


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