Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-10-2011, 13:45   #1
biowep
Member
 
L'Avatar di biowep
 
Iscritto dal: Nov 2010
Messaggi: 211
[C] Puntatore matrice

Ciao
Perché non è possibile utilizzare un puntatore (con il doppio indice) negli array bidimensionali?

Mi spiego meglio
Codice:
int arr[5];
//Il nome "arr" non è altro che un puntatore all'elemento arr[0].

int *puntatore=&arr[0]
//arr[0]==puntatore[0]), arr[1]==puntatore[1]) ecc.
La domanda quindi è, perché non posso fare la stessa cosa (creare un puntatore al primo elemento e poi usare il nome del puntatore invece di quello dell'array) con le matrici?

Codice:
int matrice[2][3]={2,3,4,5,6,7};
int *puntatore=&matrice[0][0];
printf("%d", puntatore[2][3]);

//genere un errore: "subscripted value is neither array nor pointer "
biowep è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2011, 14:16   #2
xfra
Junior Member
 
L'Avatar di xfra
 
Iscritto dal: Oct 2011
Messaggi: 3
matrice[0][0] è di per se un puntatore.. prova togliendo la &
xfra è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2011, 14:24   #3
biowep
Member
 
L'Avatar di biowep
 
Iscritto dal: Nov 2010
Messaggi: 211
no, matrice[0][0] non è un puntatore ma direttamente il valore puntato
è matrice che è un puntatore all'elemento matrice[0][0]
matrice==&matrice[0][0]
biowep è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2011, 14:28   #4
Floris
Senior Member
 
L'Avatar di Floris
 
Iscritto dal: Jan 2007
Messaggi: 2267
Codice:
int matrice[2][3]={2,3,4,5,6,7};
int *puntatore=&matrice[0][0];
printf("%d", puntatore[2][3]);

//genere un errore: "subscripted value is neither array nor pointer "
In questo caso puntatore ha tipo int*...non puoi dereferenziarlo due volte come in puntatore[2][3]...al massimo puoi fare puntatore[3]...prova a verificare.
__________________
Concluso con:...

Ultima modifica di Floris : 20-10-2011 alle 14:49.
Floris è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2011, 14:35   #5
biowep
Member
 
L'Avatar di biowep
 
Iscritto dal: Nov 2010
Messaggi: 211
Quote:
Originariamente inviato da Floris Guarda i messaggi
Codice:
int matrice[2][3]={2,3,4,5,6,7};
int *puntatore=&matrice[0][0];
printf("%d", puntatore[2][3]);

//genere un errore: "subscripted value is neither array nor pointer "
In questo caso puntatore ha tipo int*...non puoi dereferenziarlo due volte come in puntatore[2][3]...al massimo puoi fare puntatore[3]...prova a verificare.
allora se quello è di tipo int*
il puntatore matrice di che tipo è?

Ultima modifica di biowep : 20-10-2011 alle 14:38.
biowep è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2011, 14:47   #6
Floris
Senior Member
 
L'Avatar di Floris
 
Iscritto dal: Jan 2007
Messaggi: 2267
Quote:
Originariamente inviato da biowep Guarda i messaggi
allora se quello è di tipo int*
il puntatore matrice di che tipo è?
int**.
*matrice ha tipo int* e punta al primo elemento ([0][0]).
Il primo elemento ([0][0]) della matrice lo puoi quindi ottenere con **matrice.
Il puntatore a [0][1] è invece *matrice+1 e quindi *(*matrice+1) è l'elemento [0][1].
Il puntatore a [1][0] è *(matrice +1) e quindi **(matrice +1) è l'elemento [1][0].

La regola è:
Quote:
Se hai il puntatore T* p, dove T può a sua volta essere un tipo puntatore, allora p+1 è uguale a p+sizeof(T).
Negli esempi precedenti: *matrice+1 equivale a *matrice+sizeof(int) poiché *matrice ha tipo int*, mentre *(matrice+1) equivale a (matrice+sizeof(int)*3) poichè matrice ha tipo int** e le righe hanno 3 elementi. Per questo nel passaggio di matrici come parametri formali devono essere sempre specificate tutte le dimensioni della matrice tranne la prima...affinchè il compilatore possa compiere queste operazioni.
__________________
Concluso con:...

Ultima modifica di Floris : 20-10-2011 alle 14:56.
Floris è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2011, 21:02   #7
biowep
Member
 
L'Avatar di biowep
 
Iscritto dal: Nov 2010
Messaggi: 211
grazie della risposta
biowep è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 09:36   #8
Freaxxx
Senior Member
 
L'Avatar di Freaxxx
 
Iscritto dal: Dec 2006
Messaggi: 3808
vorrei precisare, onde evitare confusione, che i puntatori sono puntatori e gli array restano array, sono 2 cose diverse e separate, la "cosa" che hanno in comune è che entrambi rispondono all'aritmetica dei puntatori.

nel complesso è scorretto dire che una scritta del tipo

Codice:
matrice[i][j]
sia un puntatore a puntatore, perché semplicemente non lo è.
Freaxxx è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 10:57   #9
Floris
Senior Member
 
L'Avatar di Floris
 
Iscritto dal: Jan 2007
Messaggi: 2267
matrice è un puntatore nel senso che la locazione di memoria ad esso assegnata contiene un indirizzo di memoria e non un dato primitivo. matrice[i][j] per ogni i,j, invece è un intero.
__________________
Concluso con:...

Ultima modifica di Floris : 22-10-2011 alle 11:11.
Floris è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
WhatsApp si aggiorna con una nuova app c...
Windows 11 23H2, ricerca nel menu Start ...
Google Chrome introduce il layout vertic...
Artemis II: per la prima volta degli ast...
Battery swap e flotte smart: così nasce ...
Apple affronta un dilemma con il MacBook...
ECOVACS X11 OMNICYCLONE: 19.500 Pa, moci...
ll nuovo HONOR 600 Lite 5G arriva in Ita...
Kindle, addio allo store sui vecchi e-re...
DJI Flip Combo Fly More a 599€ invece di...
Addio cavi e adattatori multipli: Techly...
MOVA M50 Ultra: scopa elettrica con brac...
Amazon taglia i prezzi su GPU, CPU, alim...
Snapdragon 8 Elite Gen 6 Pro: migliorame...
Mythos di Anthropic trasforma il 72% del...
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: 11:10.


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