ok... righe e colonne me le posso tirare fuori perché le conosco a priori.

Le ho dichiarate anzitempo con due scanf: una per la matrice A e l'altra per la matrice B.

La funzione che genera le matrici è quella suggeritami da Oregon.

Per stampare ho provato la seguente funzione:

void stampa (**p, a, b){ //p è il puntatore della matrice generata, a e b sono le dimensioni;
int i,j;
for (i=0;i<a;i++)
for (j=0;j<c;j++)
printf("%2d ",p[i][j])
}

A video però mi dà dei numeri assurdi... che dipenda dalla funzione "crea"? Ora provo a postare il listato:

codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int **creamatrice(int a, int b) {
     int i,j;
     srand(time(NULL));
     
     int **p = (int **)malloc(a * sizeof(int *));
     
     if (!p) exit(1);
        else {
             for (i=0;i<a;i++){
                 *(p+i) = (int *)malloc(b * sizeof(int));
                 if(!(p+i)) exit(1);
                 }
             }
     for (i=0;i<a;i++)
         for (j=0;j<b;j++)
             p[i][j] = rand()%100;
             
             return (p);
     }

void stampa(int **p, int r, int c){
     int i,j;
     for (i=0;i<r;i++)
         for (j=0;j<c;j++)
             printf("%2d",p[i][j]);
     }
         

main() {
       int ar, br, ac, bc, i,j;
              
       puts ("Matrice A.Quante righe? ");
       scanf ("%d", &ar);
       puts ("Quante colonne? ");
       scanf ("%d", &ac);
       
       puts ("Matrice B.Quante righe? ");
       scanf ("%d", &br);
       puts ("Quante colonne? ");
       scanf ("%d", &bc);
       
       int **A = creamatrice (ar,ac);
       int **B = creamatrice (br,bc);   
       
       puts ("\nMatrice A:\n");
       stampa (A,ar,ac);
       puts ("\nMatrice B:\n");
       stampa (B,br,bc);
       
       
        
       fflush (stdin);
       getchar();
       }