Newsgroup: it.comp.lang.c++
Titolo: problemi con i puntatori ad array.

Salve raga,
passo subito al quesito:
Ho definito una funzione che deve lavorare con tre array diversi
utilizzando tre puntatori:
int* funzione(/* lasciamo perdere i parametri perché inutili in questo caso
/*) {
                  int array[8] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
                  int* array2[8] = { 0, 0 ,0 , 0 , 0 , 0, 0, 0 };
                  int array3[1] [8] = { 0, 1, 2, 3, 4, 5 ,6 ,7 ,8};
                  // problemi in arrivo
 
                 int* puntatore = array;
                 // per il compilatore ho creato una situazione come: int*
= []
                 int** puntatore = array2;
                 // per il compilatore ho creato una situazione come: int**
= *[]
                 int** puntatore3 = array3;   
                 // per il compilatore: int** = [] []
 
                 // la funzione continua con le operazioni.
}
Mi pare ancora che dichiarando un array bidimensionale è come aver
dichiarato un puntatore a puntatore.
Stesso discorso vale per un array di puntatori? A me pareva di sì, ma il
compilatore mi ha fatto sorgere parecchi dubbi a causa della risoluzione
che mi ha costretto a fare.
Riprendendo il discorso ho provato a dichiare i puntatori come mi indicava
il compilatore stesso:
                 int array[8] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
                 int* array2[8] = { 0, 0 ,0 , 0 , 0 , 0, 0, 0 };
                 int array3[1] [8] = { 0, 1, 2, 3, 4, 5 ,6 ,7 ,8};         
 
                 int (* puntatore) [] = array;
                 int *puntatore2 = array2;
                 int(*puntatore3) [] [] = array3;   
Dopo tutto non sono molto amante delle dichiarazioni con [] per indicare
puntatori ad array, ma personalmente ritengo che il codice soprascritto
presenta una moltitudine di errori.
In questo momento utilizzo il compilatore Turbo C++ con le opzioni C
inserite dato che in questo caso non vi sono differenze tra i due
linguaggi, ma non riesco a capire se ho preso le farfalle o sto per
prenderle.
Grazie.
-- 
La classifica dei prodotti MS:
C#, la migliore barzelletta di Bill Gates.
Visual C++, il meno standard dei compilatori C++.
J++, la copiatura più riuscita.
Windows, il più instabile.
Visual Basic, un esempio di prodotto decente della MS - forse l'unico -.
OutlookExpress, scandali su scandali.
La classifica degli "amici" coglioni:
Stefano Zanchi, il miglior lamer del mondo.
 

 dichiarato un puntatore a puntatore.
Proprio no. In realtà tu lo vedi come bidimensionale, ma rimane un
comunissimo array per il computer.
Ad esempio:
int c [5] [5] viene disposto in memoria in questo modo:
00 01 02 03 04 10 11 12 13 14 20 21 22 23 24 30 31 32 33 34 40 41 42 43 44
Se scrivi "c[4][3]" il compilatore trasforma in
*(c + 4*5 + 3).
Di conseguenza devi rivedere le dichiarazioni nel post precedente.
Ciao
Domenico Barra

 "int (*)[]"
--
Ivan Molella
__LINUX__ the choice of the __GNU__ generation
icq# 97960484

Ringrazio entrambi per le risposte date.


 // errato puntatore3  "int (*)[]"
Grazie per le risposte, ma il compilatore continua a non accettarle e mi
costringe a ripetere gli errori da te segnalati.


Nell'ipotesi che tu non voglia approfondire le conoscenze sui
puntatori (cosa che comunque e` bene fare), perche` non utilizzare 
std::vector<>?
Avresti mille problemi in meno da risolvere.
Paolo
--
Paolo Marotta
Duck Communication Entertainment s.r.l.
Largo Arenula, 11 - Roma
http://www.duckce.com
p.ma...@duckce.com
-- 
Posted from 
HA-server-a.cs.interbusiness.it
 [151.99.250.31] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Avresti mille problemi in meno da risolvere.
Buona idea, grazie Paolo.


 Se essi sono uno dei punti di forza del C++ perché tralasciarli?
Perche' sono anche una delle peggiori trappole.
Ciao,
Nicola