Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C]Passaggio di matrice a funzione che ritorna array

    Ecco il mio codice:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define size 5
    #define size2 2
    
    int *arr(int **pippo){
    int i, j;
    int *poi=malloc(size*sizeof(int));
    	
    	for(i=0;i<size;i++){
    		poi[i]=0;
    	}
    
    	for(i=0;i<size;i++){
    		for(j=0;j<size2;j++){
    			poi[i]+=pippo[i][j]+1;
    		}
    	}
    
    return poi;
    }
    
    int main(){
    int pippo[size][size2];
    int i, j, count=1;
    int *v;
    
    	for(i=0;i<size;i++){
    		for(j=0;j<size2;j++){
    			pippo[i][j]=count;
    			count++;
    		}
    	}
    
    	v=arr(pippo);
    
    	for(i=0;i<size;i++){
    		printf("\n%d", v[i]);
    	}
    
    	printf("\n");
    
    return 0;
    }
    il compilatore mi da:
    mem.c: In function ‘main’:
    mem.c:36:2: warning: passing argument 1 of ‘arr’ from incompatible pointer type [enabled by default]
    mem.c:7:6: note: expected ‘int **’ but argument is of type ‘int (*)[2]’
    Non riesco a capire come devo fare a risolvere. Se al posto di una matrice passo un semplice array il problema non c'è, come devo fare però con una matrice?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Stai seguendo un libro? Ripassa la differenza tra doppio puntatore e nome di un array allocato staticamente.

    int *arr(int pippo[size][size2]){
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Sinceramente sto seguendo una guida. Quella di Blacklight... Ho ripassato quello che c'è su questa guida ma non aiuta più di tanto...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Come sempre dico ... lascia perdere le guide online, sono quasi tutte sbagliate o incomplete ...

    Un libro (non un manualetto da 5 minuti) è sempre meglio.

    E poi esistono i "classici" (K&R, D&D) che devono essere letti ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ti consiglio di scrivere la matrice tutta su una riga, che sarà quindi un array, che poi leggi come se fosse una matrice.
    Ad esempio:

    codice:
    int *mat;
    mat=(int*)malloc(M*N*sizeof(int));  // M righe e N colonne
    Se vuoi accedere alla riga i-esima, colonna j-esima:

    codice:
    mat[i*N+j]=valore,

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.