c版:
#include <stdio.h>
#include <stdlib.h>
 
#define row 4
#define col 8 
int main()
{
    int **p;   
    int i,j;   //p[4][8] 
    //开始分配4行8列的二维数据   
    
    p = malloc(sizeof(int *)*row);
    for(i=0;i<row;i++){
        p[i]= malloc(sizeof(int)*col);
    }
 //初始化
    for(i=0; i<row; i++){
        for(j=0; j<col; j++){
            p[i][j] = j*i;
        }
    }   
    //打印数据   
    for(i=0; i<row; i++){
        for(j=0; j<col; j++)     
        {   
            if(j==0) 
                printf("\n");  
            printf("%d \t",p[i][j]);   
        }
    }   
    //开始释放申请的堆   
    for(i=0; i<row; i++){
        free(p[i]);   
    }
    free(p);   
    return 0;
}
c++版:
#include <iostream>
using namespace std;
 
int main()
{
    int **p;   
    int i,j;   //p[4][8] 
    //开始分配4行8列的二维数据   
    p = new int *[4];
    for(i=0;i<4;i++){
        p[i]=new int [8];
    }
 
    for(i=0; i<4; i++){
        for(j=0; j<8; j++){
            p[i][j] = j*i;
        }
    }   
    //打印数据   
    for(i=0; i<4; i++){
        for(j=0; j<8; j++)     
        {   
            if(j==0) cout<<endl;   
            cout<<p[i][j]<<"\t";   
        }
    }   
    //开始释放申请的堆   
    for(i=0; i<4; i++){
        delete [] p[i];   
    }
    delete [] p;   
    return 0;
}