怎么强制转换为一个指向数组的指针

如何强制转换为一个指向数组的指针?
#include   <stdio.h>

int
main()
{
                  int*   ip   =   (int*)calloc(sizeof(int),   9);
                  int   i   =   0;
                  int   (*ap)[3];
                 
                  for(;   i   <   9;   ++i)
                              ip[i]   =   i;
                             
                  ap   =   ip;   //这里报警告,incompatible   pointer   assignment
                  for(i   =   0;   i   <   3;   ++i)
                {
                              int   j;
                              for(j   =   0;   j   <   3;   ++j)
                                          printf( "%d   ",   ap[i][j]);
                              putchar( '\n ');
                }
               
                free(ip);
}

强制转换为一个指向3个元素的int数组类型指针,如何转换?

------解决方案--------------------
指针不能那样操作,只能赋值给它,而不是地址。
------解决方案--------------------
typedef int (*p)[3];
ap = (p)ip;
------解决方案--------------------
vc6.0 没问题
#include <stdio.h>
#include "stdlib.h "
typedef int (*p)[3];

int
main()
{
int* ip = (int*)calloc(sizeof(int), 9);
int i = 0;
int (*ap)[3];

for(; i < 9; ++i)
ip[i] = i;

ap = (p)ip;
for(i = 0; i < 3; ++i)
{
int j;
for(j = 0; j < 3; ++j)
printf( "%d ", ap[i][j]);
putchar( '\n ');
}

free(ip);
}