Passaggio vettore a funzione C

di il
6 risposte

Passaggio vettore a funzione C

Salve a tutti sono nuovo del forum, sono uno studente di informatica alle prime armi con C.

Sto scrivendo un piccolo algoritmo di ricerca, e quando passo la key e il vettore in cui cercare alla funzione, succede una cosa strana:
la funzione mi stampa (solo per verifica passaggio) il vettore con l'ultimo elemento sostituito dalla key!!

come è possibile?

il codice e' questo:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define AR 10

int cerca(int k, int a[AR]) {
    int i, mezzo;
    mezzo = (AR/2);
    for (i=0 ; i<=AR ; i++) { printf("%3d", a[i]); }
    printf("\n%d\n", k);                                          /* controllo array interno funzione cerca */
    printf("%2d", a[10]);
.
. /*algoritmo ricerca*/
.
return 0; }  /* per ora non restituisce niente */

int main() {

    int i, j, temp, key, arrayO[AR];

    srand( time(NULL) );
    for (i=0 ; i<=AR ; i++) {                                 /* generazione casuale */
        arrayO[i] = rand() % (99) + 1 ;
    }

    for (i=0 ; i<=(AR-1) ; i++) {
	   for (j=i+1 ; j<=AR ; j++) {
		   if (arrayO[i] > arrayO[j]) {
		      temp = arrayO[j];                                /* ordinamento array */
		      arrayO[j] = arrayO[i];
		      arrayO[i] = temp;
		   }		
	   }  
    }

    for (i=0 ; i<=AR ; i++) { printf("%3d", arrayO[i]); }
    printf("\n\n");                                                          /* controllo array interno al main */


    printf("\n\nInserisci numero da cercare: ");
    scanf("%d", &key);
    cerca(key, arrayO);                                                        /* chiamata funzione */

return 0;
}

6 Risposte

  • Re: Passaggio vettore a funzione C

    i<=AR
    printf("%2d", a[10]);
    Controlla prima queste due parti del codice. Un indice di un array di n celle inizia da 0 per finire a n-1. Quindi c'è qualcosa che non va nel tuo codice.
  • Re: Passaggio vettore a funzione C

    Ho capito cosa intendi, ma per assegnare all' array la key, c'e qualcosa che va oltre questo no?
  • Re: Passaggio vettore a funzione C

    Che ne dici di fare una prova? Nessuno sa com'è la rappresentazione in memoria delle variabili. Può essere che nel tuo caso, key sia proprio dopo l'array in memoria e dicendoli di stampare a[10] che non esiste il compilatore lo traduce in:
    stampa il valore della posizione di memoria 10 celle dopo a[0]. E così in quella cella si trova key (per coincidenza) e viene stampato quello.
  • Re: Passaggio vettore a funzione C

    Hai ragione, ho modificato un po il codice con questo e funziona!
    
        printf("Di quanti elementi deve essere composto l'array?(max 50): ");
        scanf("%d", &max);
        max = max - 1 ;
    
  • Re: Passaggio vettore a funzione C

    Grazie mille, ho provato prima del tuo secondo messaggio grazie ancora XD
  • Re: Passaggio vettore a funzione C

    Figurati
Devi accedere o registrarti per scrivere nel forum
6 risposte