Io di solito per gestire le matrici con i puntatori creo inizialmente un puntatore che punta ad un vettore di puntatori ogni cella del quale punta ad un altro vettore che corrisponde ad una riga della matrice...eccoti il codice per farti capire...
#include<stdio.h>
#include<stdlib.h>
int** crea_matrice(int n);
void stampa(int ** mat, int n);
int main (){
int n;
int ** aus;
printf("inserisci dimensione:\n"); /*uso matrice quadrate per fare prima*/
scanf("%d",&n);
aus=crea_matrice(n);
stampa(aus,n);
system("pause");
return 0;
}
int** crea_matrice(int n){
int i,j;
int **aus;
aus=(int**)malloc(sizeof(int*)*n); /*alloco il puntatore al vettore di puntatori*/
if(aus==NULL){
printf("errore allocazione aus (matrice)");
return 0;
}
for(i=0;i<n;i++){
aus[i]=(int*)malloc(sizeof(int)*n);/*alloco i vari puntatori all'interno del vettore cioe le varie righe*/
if(aus[i]==NULL){
printf("errore allocazione aus[%d]",i);
return 0;
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("inserisci valore aus[%d][%d]",i,j);
scanf("%d",&aus[i][j]);
}
}
return aus;
}
void stampa(int ** mat, int n){
int i,j;
for(i=0;i<n;i++){
printf("\n");
for(j=0;j<n;j++){
printf("%d",mat[i][j]);
}
}
}
questo è il metodo che ho sempre visto per gestire matrici....
ma a te queste matrici servono dinamiche o statiche..??
perchè se ti servono statiche la cosa è molto semplice in quanto tutti gli array(vettori e matrici) vengono passati in automatico per riferimento -> vengono sempre restituiti.... basta usarle come variabili normali così:
#include<stdio.h>
#include<stdlib.h>
#define MAX 30
void stampa_matrice(int mat[MAX][MAX],int n);
void crea_matrice(int mat[MAX][MAX],int n);
int main(){
int n,mat[MAX][MAX];
printf("inserisci numero di righe/colonne:");
scanf("%d",&n);
if(n<0 || n>MAX)
printf("n deve essere compreso tra 0 e MAX");
crea_matrice(mat,n);
stampa_matrice(mat,n);
system("pause");
return 0;
}
void crea_matrice(int mat[MAX][MAX],int n){
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++){
printf("inserisci mat[%d][%d]",i,j);
scanf("%d",&mat[i][j]);
}
}
void stampa_matrice(int mat[MAX][MAX],int n){
int i,j;
for(i=0;i<n;i++){
printf("\n");
for(j=0;j<n;j++){
printf("%d",mat[i][j]);
}
}
}
quest'ultima cosa funziona appunto perchè il nome della matrice è il puntatore ad essa...
per il discorso dello stack ecc ecc mi disp ma non ho capito cosa intendevi.....