Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Passare una matrice ad una funzione

    Ciao ragazzi,
    mi sono imbattuto in un problema che magari per voi è stupido, ma non capisco proprio dove sta il mio errore.

    Devo capire come mai non compila questo mini programma:

    Codice PHP:
    void prova(int b[][9]){}

    int main(int argcchar *argv[])
     {   
           
    int a[1][1];  
           
    prova(a); //l'errore è riportato qui

    Il compilatore dice: cannot convert `int (*)[1]' to `int (*)[9]' for argument `1' to `void prova(int (*)[9])'


    Cosa devo fare?

    Grazie mille!

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    codice:
    {
       int matrix[2][3];
       ...
       f(matrix);
    }
    
    void f(int (*m)[3]) {
       ...
       m[1][2] = ...
       ...
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: Passare una matrice ad una funzione

    void prova(int b[][1]){}
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    @Alex, il tuo metodo non ha cambiato nulla.

    @Oregon, il tuo sistema funziona, solo che così sono obbligato a definire una dimensione prefissata per la matrice.

    Possibile che non esista un metodo funzionante e flessibile?

    Grazie per gli aiuti

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma la matrice deve essere costante, se allocata in quel modo.

    Altrimenti devi usare l'allocazione dinamica ed è un altro paio di maniche ...

    Quindi, per riassumere, a parte il passaggio della matrice, tu questa matrice come la allochi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Facendo questo:

    Codice PHP:
    int dim 4;
    int mat[dim][dim];

    //inizializzazione della matrice     
    for(int i=0;i<dim;i++)     
    {        
                for(
    int j=0;j<dim;j++)
                {            
                          
    mat[i][j]=rand()%10;            
                 }


  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da scrittore80
    int dim = 4;
    int mat[dim][dim];
    Questo tipo di allocazione, oltre ad essermi particolarmente "antipatica", è esclusivamente utilizzabile con compilatori che seguono lo standard C99.

    Ti consiglio di non adottarla e usare, al suo posto, l'allocazione dinamica della matrice.

    In questo modo potrai passare la matrice, in ogni caso, con una semplice

    void prova(int **b)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Ma anche quando la dichiaro devo fare:
    codice:
    int **mat;
    ?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì, naturalmente. E devi allocarla correttamente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    oddio, mi mandi in crisi....
    va bene questo per assegnargli un valore?

    codice:
    mat[1][2]=3;
    Quando arrivo a casa provo direttamente, per ora grazie!

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