Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3

    [C] funzioni che modificano array

    Salve!

    Io adopero il C per fare i miei calcoli. Una cosa che non ho ben capito, e' come scrivere una funzione che modifica un array a uno o piu' inidici, come per esempio una funzione che riempie una matrice di numeri casuali.

    Ho capito che per esempio

    void matrixFill( double A[DIM][DIM] );

    funzionerebbe, ma che il modo giusto implica l'uso dei puntatori. Qualcuno puo' dirmi come:

    - definire la funzione;
    - definire l'array da modificare (ovunque sia da definire)
    - chiamare la funzione

    Grazie!!!

    Giuseppe

  2. #2

    Re: [C] funzioni che modificano array

    Originariamente inviato da gnl
    Salve!

    Io adopero il C per fare i miei calcoli. Una cosa che non ho ben capito, e' come scrivere una funzione che modifica un array a uno o piu' inidici, come per esempio una funzione che riempie una matrice di numeri casuali.

    Ho capito che per esempio

    void matrixFill( double A[DIM][DIM] );

    funzionerebbe, ma che il modo giusto implica l'uso dei puntatori. Qualcuno puo' dirmi come:

    - definire la funzione;
    - definire l'array da modificare (ovunque sia da definire)
    - chiamare la funzione

    Grazie!!!

    Giuseppe
    non e' piu' giusto, e' uguale ..
    poiche' double matrixFill(double A[DIM][DIM] )
    viene tradotto internalmente in
    double matrixFill(double **A)
    in piu' essendo di dimensione fissa viene sicuramente allocato
    uno spazio corretto per ospitare il vettore invece definendolo
    double matrixFill(double **A)
    la cosa puo' creare problemi di buffer overflow e/o
    sovrascrittura ad indirizzi errati..
    RICORDATI sempre di lavorare con array dichiarati di dimensione fissa
    a meno che tu non sappia cosa vai a fare..

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3

    ok

    Grazie! io lavoro sempre con array a dimensione fissa, anche se questa storia dell'allocazione dinamica mi tenta...

    Giuseppe

  4. #4

    Re: ok

    Originariamente inviato da gnl
    Grazie! io lavoro sempre con array a dimensione fissa, anche se questa storia dell'allocazione dinamica mi tenta...

    Giuseppe
    per l' allocazione dinamica vediti i costrutti malloc e free
    (spero di non confondermi col c++ dove invece esiste il new..)

  5. #5
    Puoi provare cosi:

    void matrixFill(double *A[DIM][DIM]) {
    int i,j;
    for(i=0;i<DIM;i++)
    for(j=0;j<DIM;j++)
    *A[i][j]=0.0; /* o qualsiasi valore che vuoi usare come default */
    }

    Per chiamarla poi non fai altro che usare:
    matrixFill(&A[DIM][DIM]);

    Devi usare i puntatori in quanto è l'unico modo che hai per passare e sopratutto modificare una matrice.
    Se vuoi allocarla dinamicamente devi tenere presente che solo il primo parametro dimensionale può essere variabile, tutti gli altri devono essere noti a tempo di compilazione.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.