[C](risolto) Array e funzioni. Problema da novello.

di il
2 risposte

[C](risolto) Array e funzioni. Problema da novello.

Sto proseguendo il mio percorso di studio del C da autodidatta e mi sto cimentando sul binomio array-funzioni,
Ho voluto scrivere un programmino idiota che prendesse un vettore di numeri interi di lunghezza n scelta da imput e poi aumentasse i valori dei vari elementi di uno.
Es: 3 4 5 --> 4 5 6.
Purtoppo ogni volta che uso array e funzioni insieme mi da sempre lo stesso errore, in questo caso:
Warning: passing argument 1 of "incrementa_vet" makes pointer from integer without a cast.
Ora io so proprio poco di C ma mi sembra di aver capito che c'è un problema di puntatori (di cui so ancora molto poco) e di casting (anche se non capisco il perchè visto che rimango sempre in ambito dei numeri interi int)
Vi posto il codice intanto:

#include <stdio.h>
#define MAX 10

void incrementa_vett( int v[], int lunghezza);  // prototipo funzione

				
int main (int argc, const char * argv[]) {
	int v[MAX];
	int i, n;
	
	do { 
		printf("Quanti numeri saranno inseriti? ") ; 
		scanf("%d",&n) ; 
		/* LA DIMENSIONE MASSIMA DEL VETTORE E’ COMPRESA TRA 1 E MAXN */ 
		if ( n > MAX || n <=0 ) 
			printf("Errore: il numero deve essere compreso tra %d e 0\n", MAX) ; 
	}
		while ( n > MAX || n <=0 ) ; 
	
	
	for(i=0; i<n; i++){
		printf("Inserisci il numero %d ", i+1);
		scanf("%d", &v[i]);
	}
	
	incrementa_vett(v[n], n); // QUI MI DA WARNING	
	printf("Elementi vettore aumentati:\n");
	
	for (i=0; i<n; i++){
		printf("%d\n", v[i]);
	}
	
	return 0;
	
}

void incrementa_vett(int v[], int lunghezza){
	int i;
	for (i=0; i<lunghezza; i++){
		v[i]++;
	}
}

Ora a me interessa molto venirne a capo sopratutto perchè mi sa che sto sbagliando qualcosa di basico e concettuale alla base, e lo sbaglio ogni volta che provo a operare con delle funzioni sugli array. Qualcuno può darmi una mano o almeno indirizzzarmi su qualche strada?

2 Risposte

  • Re: [C](risolto) Array e funzioni. Problema da novello.

    L'errore é abbastanza semplice da risolvere ma bisogna spiegarti il perche. Allora se io ho un vettore il primo elemento sará v[0] il secondo v[1] e l'ennesimo sará v[n-1]. Quindi come vedi tu alla funzione non li stai passando il vettore (quindi v e basta) ma il valore di una cella la n+1-esima per precisione ed é una cella che non esiste. Cmq per il compilatore lui vede che li stai passando un intero e lui prova a promuoverlo in puntatore da cui l'errore. Quindi per risolverlo non devi passare v[n] ma semplicemente v.
  • Re: [C](risolto) Array e funzioni. Problema da novello.

    Grazie mille proverò ora a svolgere un po di esercizi.
Devi accedere o registrarti per scrivere nel forum
2 risposte