Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    24

    [C] Errore link nel passaggio per valore di una funzione che tratta array

    salve ragazzi volevo sapere se potevate aiutarmi l'errore in questione è questo:

    [Linker error] undefined reference to `riempiautovettore(float, unsigned long)'

    ld returned 1 exit status

    Praticamente volevo creare delle funzioni per giocare un po' con gli array, altre funzioni infatti le ho messe tra i commenti...Credo che l'errore sia nel passaggio per valore...Vi ringrazio anticipatamente
    di seguito posto il codice


    #include<stdio.h>
    #include<stdlib.h>
    #define N 15


    float v1[N];

    void pulisci(void);
    void inseriscivettore (float, unsigned long);
    void stampavettore(float, unsigned long);
    void riempiautovettore (float, unsigned long);
    void scambio (float, unsigned long, unsigned long);
    void bubblesort (float, unsigned long);






    main(){

    riempiautovettore(v1[N],N);


    }


    void pulisci(void){

    while(getchar()!='\n');

    }



    /* void inseriscivettore (float vett[], unsigned long dim){

    unsigned long i;

    for(i=0;i<dim;i++) do{

    printf("Inserisci elemento v[%lu]= ",i);
    scanf("%f", & vett[i]);
    pulisci();

    } while(i>0 && vett[i]<=vett[i-1]);



    }


    void stampavettore (float vett[], unsigned long dim) {

    unsigned long i;
    for(i=0;i<dim;i++)

    printf("v[%lu] = %f",i, vett[i]);

    }


    */ void riempiautovettore (float vett[], unsigned long dim) {



    unsigned long i;

    for(i=0;i<dim;i++) do{
    unsigned long i;

    vett[i]=rand();

    }while(i<0,vett[i]<=vett[i-1]);




    }


    /* void scambio (float v[], unsigned long i, unsigned long j){

    float temp=v[i];
    v[i]=v[j];
    v[j]=temp;
    }




    void bubblesort(float v[], unsigned long dim){

    unsigned long i,j;
    unsigned short ordinato =0;

    for(j=0;j<dim-1 &&!ordinato; j++){
    ordinato=1;

    for(i=dim-1;i>j;i--) if(v[i]<v[i-1]){

    scambio(v,i,i-1);
    ordinato=0;

    }
    }
    } */

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Deve essere

    void riempiautovettore(float *vett, unsigned long dim);

    e la chiamata

    riempiautovettore(v1, N);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    24
    ti ringrazio..

    ma quindi così sto facendo il passaggio per indirizzo, se voglio fare il passaggio per valore devo metterci un numero per forza? poresti farmi qualche esempio?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ma se devi riempire un vettore all'interno della funzione, DEVI passarlo per indirizzo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di bobosg
    Registrato dal
    Jun 2008
    Messaggi
    34
    innanzitutto a una funzione il vettore non si passa con le parentesi quadre
    esempio:
    Codice PHP:
    int array[n];
    int funzione(int array, int n);
    chiamata funzione(array,n); 
    poi il C passa automaticamente i vettori alle funzioni per riferimento e quindi la funzione chiamata potrà modificare i valori degli elementi inclusi nel vettore originale del programma chiamante
    Ma se devi riempire un vettore all'interno della funzione, DEVI passarlo per indirizzo ...
    il nome del vettore è in realta l'indirizzo del suo primo elemento!

    spero di essere stato chiaro
    ciao

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da bobosg
    il nome del vettore è in realta l'indirizzo del suo primo elemento!
    Grazie per la precisazione ... infatti avevo indicato di fare la chiamata in questo modo

    riempiautovettore(v1, N);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di bobosg
    Registrato dal
    Jun 2008
    Messaggi
    34
    Originariamente inviato da oregon
    Grazie per la precisazione ... infatti avevo indicato di fare la chiamata in questo modo

    riempiautovettore(v1, N);
    infatti non ho detto che non era corretto anzi!
    solo che lui ha chiesto degli esempi e gliel'ho fatti citando una cosa giusta che hai detto tu!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.