View Full Version : [C] Problema con funzioni e puntatori
facano92
28-05-2012, 16:06
Salve ragazzi, all'uni ci stanno facendo fare un corso di informatica con "basi" di programmazione in C, per quanto riguarda quest'ultimo non ho ancora capito come funzionano i puntatori e gli array multidimensionali.
Ho cercato di fare qualcosa da solo: un programma che acquisista una matrice con 2 righe e un numero di colonne pari al massimo della lunghezza della stringa (il mio caso [2][50]), che le stampi e poi ho voluto creare una funzione che inserendo il numero della riga mi stampasse solamente quella riga, ma non ci sono riuscito. ç_ç
Ecco a voi cosa ho fatto:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void stampa (char *v, int n);
int main()
{
char v[2][50];
int r;
for (r=0; r<2; r++)
{
gets(v[r]);
}
printf("\n\n");
for (r=0; r<2; r++)
{
puts(v[r]);
}
printf("\nQuale riga vuoi stampare?");
scanf("%d", &r);
stampa (&v, r);
return 0;
}
void stampa (char *v, int n)
{
puts((*v[n]));
}
Dove sbaglio? Le ho provate tutte ma non ho capito ç_ç
cirano994
01-06-2012, 20:37
Salve ragazzi, all'uni ci stanno facendo fare un corso di informatica con "basi" di programmazione in C, per quanto riguarda quest'ultimo non ho ancora capito come funzionano i puntatori e gli array multidimensionali.
Ho cercato di fare qualcosa da solo: un programma che acquisista una matrice con 2 righe e un numero di colonne pari al massimo della lunghezza della stringa (il mio caso [2][50]), che le stampi e poi ho voluto creare una funzione che inserendo il numero della riga mi stampasse solamente quella riga, ma non ci sono riuscito. ç_ç
Ecco a voi cosa ho fatto:
Dove sbaglio? Le ho provate tutte ma non ho capito ç_ç
Magari è troppo tardi, ma lo scrivo comunque:
Quando vuoi passare come parametro ad una funzione una matrice, devi specificare il numero delle colonne, quindi:
<T> nomeFunzione(<T> matrice[][COLONNE])
(<T> è un "marcatore" per indicare un tipo generico, puoi mettere quello che vuoi)
Ho notato anche che hai scritto:
puts((*v[n]));
Quando passi ad una funzione un vettore o una matrice, sei obbligato a passarli per riferimento (e quindi passi il puntatore). A quel punto devi comportarti nel modo "normale" ovvero come se il vettore (o matrice) l'avessi creata all'interno di quella funzione.
Quindi non serve il *.
(Comportandoti in modo "normale" per fare scanf e mettere il valore nella matrice devi usare sempre &, anche se sei in una funzione e la matrice è un parametro).
In più:
stampa (&v, r);
Non devi mettere &, perchè v è già il puntatore alla matrice.
Se hai bisogno chiedi pure. ;)
Squall 94
02-06-2012, 12:16
Magari è troppo tardi, ma lo scrivo comunque:
Quando vuoi passare come parametro ad una funzione una matrice, devi specificare il numero delle colonne, quindi:
<T> nomeFunzione(<T> matrice[][COLONNE])
(<T> è un "marcatore" per indicare un tipo generico, puoi mettere quello che vuoi)
Ho notato anche che hai scritto:
puts((*v[n]));
Quando passi ad una funzione un vettore o una matrice, sei obbligato a passarli per riferimento (e quindi passi il puntatore). A quel punto devi comportarti nel modo "normale" ovvero come se il vettore (o matrice) l'avessi creata all'interno di quella funzione.
Quindi non serve il *.
(Comportandoti in modo "normale" per fare scanf e mettere il valore nella matrice devi usare sempre &, anche se sei in una funzione e la matrice è un parametro).
In più:
stampa (&v, r);
Non devi mettere &, perchè v è già il puntatore alla matrice.
Se hai bisogno chiedi pure. ;)
Il passaggio del valore credo sia errato perchè se v è una matrice non puoi non passarli il secondo valore, o ci metti 0 o non saprei dirti, in C++ facevo così.
Poi conta che da matrice in questo caso diventi un vettore, forse fa una sorta di casting ( difficile ) oppure un errore che non ti so spiegare.
cirano994
02-06-2012, 12:53
Il passaggio del valore credo sia errato perchè se v è una matrice non puoi non passarli il secondo valore, o ci metti 0 o non saprei dirti, in C++ facevo così.
Poi conta che da matrice in questo caso diventi un vettore, forse fa una sorta di casting ( difficile ) oppure un errore che non ti so spiegare.
Così funziona:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void stampa (char v[][50], int n);
int main(){
char v[2][50];
int r;
for (r=0; r<2; r++)
gets(v[r]);
printf("\n\n");
for (r=0; r<2; r++)
puts(v[r]);
printf("\nQuale riga vuoi stampare?");
scanf("%d",&r);
stampa(v,r);
system("PAUSE");
}
void stampa (char v[][50], int n){
puts(v[n]);
}
Non capisco qual è il problema.
:)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.