Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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
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.

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: 6384
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
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: 6384
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote