Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    150

    [C] Matrici dinamiche e passaggio a funzione

    Salve a tutti ho questo problema con le matrici che non riesco a risolvere :

    Codice PHP:

    void MiaFunzione 
    int **int n )
    {
         
    int i ;

          
    = (int**) calloc sizeof(int) );

          for ( 
    i  i++ )
             
    M[i] = ( int* ) calloc sizeof(int) );

          for ( 
    i  i++ )
               for ( 
    j  j++ )
                      
    M[i][j] = 0;
    }

    int main ()
    {
         
    int **Matrice,i,j;
         
    MiaFunzione Matrice 5);

          for ( 
    i  i++ )
               for ( 
    j  j++ )
                      
    printf("%d",Matrice[i][j];

    Al ritorno dalla funzione i valori della matrice sono tutti diversi da 0 sembra che la matrice sia passata per valore e non per riferimento come posso risolvere ?
    Carlo Carbone

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Guarda innanzitutto ci sono diversi errori di compilazione banali (tipo parentesi mancanti o variabili non dichiarate) dovuti probabilmente a distrazione. In particolare, ti consiglio di rivedere i for innestati perché in quello interno ( sia nella funzione che in main() ) c'è un errore nel predicato di uscita: " i < m" anziché "j < m".

    Per il problema in sé, tu in pratica non fai altro che passare (appunto per valore) un puntatore a puntatore alla funzione. Quest'ultima ci fa quello che ci deve fare sopra, ma poi tali modifiche non sono visibili in main(). Per risolvere, teoricamente, dovresti passare per riferimento quel puntatore a puntatore, ma questo significa quindi che nella funzione ti ritrovi con un puntatore a puntatore a puntatore... e francamente non saprei nemmeno come gestire la cosa.

    A suo tempo, quando mi ritrovavo a lavorare con le matrici dinamiche in C, anziché dichiarare un puntatore a puntatore, dichiaravo un puntatore di base semplice, tipo (nel tuo caso)

    int *Matrice;

    poi in main() allocavo tanto spazio quanto ne occorreva per l'intera matrice, quindi ad esempio:

    Matrice = (int *) calloc ( n * m, sizeof(int) );

    e passavo quindi questo puntatore alla funzione, trattandolo di fatto come un semplice array monodimensionale. Per accedere alle varie componenti della matrice (per esempio per fare delle assegnazioni) utilizzando un puntatore semplice, si può ricorrere alla mappa di memorizzazione:

    codice:
      for ( i = 0; i < n_rig; i++)
         for ( j = 0; j < n_col; j++)
            *(Matrice + i*n_col + j) = /* qualcosa */
    dove i è l'indice di riga e j l'indice di colonna.
    every day above ground is a good one

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.