Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicit e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Informazioni su linguaggio C
Forum - C/C++ - Informazioni su linguaggio C

Avatar
blink (Normal User)
Newbie


Messaggi: 3
Iscritto: 29/01/2010

Segnala al moderatore
Postato alle 21:25
Venerd, 29/01/2010
Ciao a tutti... ho 13 anni ed ho deciso di iniziare a programmare in C...
Sto leggendo una guida, e sono arrivato ai puntatori...
Quello che non ho capito : Quand' necessario usare un puntatore? Potreste farmi un esempio di programma?
Non ho capito inoltre questa sintassi: tipo **variabile;
ad esempio quando il main prende certi argomenti come parametri, lo si dischiara cosi:
main(int argc, char **argv) perch cosi?
A volte lo si dichiara anche cosi: main(int argc, char *argv) oppure main(int argc, char argv)...
che differenza c' tra i tre? Quand' meglio usare uno piuttosto che un altro?

Grazie a tutti :hail:

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 23:43
Venerd, 29/01/2010
I puntatori non sono una cosa semplice da capire, e sono una caratteristica molto importante per il C, per certe operazioni necessario usarle i puntatori. Basti pensare alla stringa di carattere, in C non esiste la "stringa".. ma bens puntatori a caratteri che formano come una stringa. Oppure sono anche degli elementi necessari per produrre codici sorgenti molto efficienti.
**variabile solitamente sta per matrice (o vettore di vettori) di.. non hai scritto il tipo di dato, vabb non quello il punto, ci ti ho detto sono solo 1%...e poi..non una cosa che va chiesta alla leggera in un forum soprattutto. Se stai leggendo una guida online, lasciala perdere.. prenditi un buon manuale e studiati bene, da li puoi capire tutto.
Mentre per il main, quelli che hai detto sono i parametri che si passano da linea di comando. int main( int argc, char* argv[] ) che argc sta per numero di argomenti, e char *argv[] ed equivalente a char **argv che una matrice, cio una array di array di caratteri.. anche qui mi fermo per lo stesso motivo di prima. :)

Ultima modifica effettuata da Lawliet il 29/01/2010 alle 23:46


"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
cit. theprogrammer
PM Quote
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 8:42
Sabato, 30/01/2010
Per quanto riguarda l'utilizzo dei puntatori, sono essenziali nella programmazione. Io li uso spessisimo (per creare delle liste), specialmente nei giochi.


The old lie: Dulce et decorum est pro patria mori
PM Quote
Avatar
blink (Normal User)
Newbie


Messaggi: 3
Iscritto: 29/01/2010

Segnala al moderatore
Postato alle 22:50
Sabato, 30/01/2010
Testo quotato

Postato originariamente da Lawliet:

I puntatori non sono una cosa semplice da capire, e sono una caratteristica molto importante per il C, per certe operazioni necessario usarle i puntatori. Basti pensare alla stringa di carattere, in C non esiste la "stringa".. ma bens puntatori a caratteri che formano come una stringa. Oppure sono anche degli elementi necessari per produrre codici sorgenti molto efficienti.
**variabile solitamente sta per matrice (o vettore di vettori) di.. non hai scritto il tipo di dato, vabb non quello il punto, ci ti ho detto sono solo 1%...e poi..non una cosa che va chiesta alla leggera in un forum soprattutto. Se stai leggendo una guida online, lasciala perdere.. prenditi un buon manuale e studiati bene, da li puoi capire tutto.
Mentre per il main, quelli che hai detto sono i parametri che si passano da linea di comando. int main( int argc, char* argv[] ) che argc sta per numero di argomenti, e char *argv[] ed equivalente a char **argv che una matrice, cio una array di array di caratteri.. anche qui mi fermo per lo stesso motivo di prima. :)


Quindi per dichiarare un puntatore a una matrice farei:
int **matrix[3][3] Per dichiarare quindi un kernel 3x3...
e se faccio int *matrix[3][3] ho un errore di sintassi? ( non posso provare perch non ho il compilatore a portata di mouse :) )
Comunque, potreste farmi un esempio d'uso della matrice, e un esempio di programma in cui strettamente necessario utilizzare dei puntatori invece che normali variabili?

Il miglioramento nell'utilizzare un puntatore sta anche nelle prestazioni?


Inoltre, volevo anche sapere quando utile usate l'istruzione typedef.
ad esempio, se ho:
typedef float tipo;
tipo variabile = 0.0;
In questo caso inutile... posso fare direttamente float tipo = 0.0;


Grazie di tutto ;)

Ultima modifica effettuata da blink il 30/01/2010 alle 23:10
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:47
Domenica, 31/01/2010
Testo quotato

Postato originariamente da blink:
Quindi per dichiarare un puntatore a una matrice farei:
int **matrix[3][3]



No ... semmai

int **matrix;

Testo quotato

Per dichiarare quindi un kernel 3x3...



Cosa un "kernel 3x3" ... ??

Testo quotato

e se faccio int *matrix[3][3] ho un errore di sintassi?



No ... ma significa una cosa precisa ... una "matrice 3x3 di puntatori ad int" che non so se quello che vorresti ottenere ...

Testo quotato

Comunque, potreste farmi un esempio d'uso della matrice, e un esempio di programma in cui strettamente necessario utilizzare dei puntatori invece che normali variabili?



Ne trovi a migliaia su internet e nei libri.

Quando e se studierai le "liste" (e altre strutture simili), vedrai che sono necessari i puntatori ...

Se vorrai modificare delle variabili esterne, dall'interno di una funzione, vedrai che necessario passarle con un puntatore ...

Testo quotato

Il miglioramento nell'utilizzare un puntatore sta anche nelle prestazioni?



Non questo ... ti ripeto, i puntatori sono "necessari" in tante situazioni ...

Una nota a margine ... non puoi capire come si dovrebbe l'importanza e l'uso di puntatori e matrici se lo fai attraverso poche domande e risposte in un forum ...

I puntatori si studiano sui libri, da cui si prendono gli esempi che servono a capirli, e ci si mette tanto tanto tempo ... a buon intenditor ...

Testo quotato

Inoltre, volevo anche sapere quando utile usate l'istruzione typedef.
ad esempio, se ho:
typedef float tipo;
tipo variabile = 0.0;
In questo caso inutile... posso fare direttamente float tipo = 0.0;



Ovviamente cos non utile ... ma se il tipo di dato, ad esempio, una struttura, allora ...

Ti rimando alla parte del tuo libro che ne parla ...


Ricorda che nessuno obbligato a risponderti e che nessuno perfetto ...
PM Quote
Avatar
blink (Normal User)
Newbie


Messaggi: 3
Iscritto: 29/01/2010

Segnala al moderatore
Postato alle 16:51
Domenica, 31/01/2010
Testo quotato

Postato originariamente da nessuno:

Testo quotato

Postato originariamente da blink:
Quindi per dichiarare un puntatore a una matrice farei:
int **matrix[3][3]



No ... semmai

int **matrix;

Testo quotato

Per dichiarare quindi un kernel 3x3...



Cosa un "kernel 3x3" ... ??

Testo quotato

e se faccio int *matrix[3][3] ho un errore di sintassi?



No ... ma significa una cosa precisa ... una "matrice 3x3 di puntatori ad int" che non so se quello che vorresti ottenere ...

Testo quotato

Comunque, potreste farmi un esempio d'uso della matrice, e un esempio di programma in cui strettamente necessario utilizzare dei puntatori invece che normali variabili?



Ne trovi a migliaia su internet e nei libri.

Quando e se studierai le "liste" (e altre strutture simili), vedrai che sono necessari i puntatori ...

Se vorrai modificare delle variabili esterne, dall'interno di una funzione, vedrai che necessario passarle con un puntatore ...

Testo quotato

Il miglioramento nell'utilizzare un puntatore sta anche nelle prestazioni?



Non questo ... ti ripeto, i puntatori sono "necessari" in tante situazioni ...

Una nota a margine ... non puoi capire come si dovrebbe l'importanza e l'uso di puntatori e matrici se lo fai attraverso poche domande e risposte in un forum ...

I puntatori si studiano sui libri, da cui si prendono gli esempi che servono a capirli, e ci si mette tanto tanto tempo ... a buon intenditor ...

Testo quotato

Inoltre, volevo anche sapere quando utile usate l'istruzione typedef.
ad esempio, se ho:
typedef float tipo;
tipo variabile = 0.0;
In questo caso inutile... posso fare direttamente float tipo = 0.0;



Ovviamente cos non utile ... ma se il tipo di dato, ad esempio, una struttura, allora ...

Ti rimando alla parte del tuo libro che ne parla ...


Un "kernel" e una matrice sono la stessa cosa.
IO HO IL LIBRO DEITEL, ho finito di leggerlo due giorni fa, e alcune cose non mi sono ancora chiare.
Io ho chiesto degli esempi di CODICE, dove necesssario utilizzare un puntatore, non li ho trovati.
Comunque, int **matrix; non multidimensionale.....no?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:57
Domenica, 31/01/2010
Testo quotato

Postato originariamente da blink:
Un "kernel" e una matrice sono la stessa cosa.



Ehhh???

E dove hai letto questa fesseria?

Testo quotato


IO HO IL LIBRO DEITEL, ho finito di leggerlo due giorni fa, e alcune cose non mi sono ancora chiare.



Rileggilo ... una volta non basta ...

Testo quotato

Io ho chiesto degli esempi di CODICE, dove necesssario utilizzare un puntatore, non li ho trovati.



Non c'e' bisogno di mostrare codice ... se hai letto il libro hai sicuramente affrontato l'argomento funzioni e il passaggio degli argomenti per puntatore ... ecco, quello un caso di necessit dell'utilizzo dei puntatori ... ma forse non avevi letto la mia risposta bene ...

Testo quotato

Comunque, int **matrix; non multidimensionale.....no?



Cosa vuoi dire?


Ricorda che nessuno obbligato a risponderti e che nessuno perfetto ...
PM Quote