Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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?
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
Per quanto riguarda l'utilizzo dei puntatori, sono essenziali nella programmazione. Io li uso spessisimo (per creare delle liste), specialmente nei giochi.
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
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à.
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?
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à.