请教上 小弟我这么个指针数组赋值对吗

请问下 我这么个指针数组赋值对吗?
#include<stdio.h>
#define M 5
int main(int argc, char* argv[])
{
  int n=4;
  char *a[M];
  for(int i=0;i<M;i++)
  a[i]=new char[n];
  printf("%d\n",sizeof(a));
  for(i=0;i<M;i++)
  printf("%d\n",sizeof(a[i]));
  int nIndex=1;
  for(i=0;i<M;i++)
  {
  for(int j=0;j<n;j++)
  {
  a[i][j]=nIndex;
  nIndex++;
  printf("%4d",a[i][j]);
  }
  printf("\n");
  }
  for(i=0;i<M;i++)
  delete[] a[i];
  return 0;


请问下 我这样给指针数组赋值对吗
不对的话 那指针数组是怎么赋值的啊?


------解决方案--------------------
没问题啊

不过注意了

#define M 5

如果这个M是函数得出的,运行后的变量就不能这么声明了 char *a[M];

------解决方案--------------------
那只能malloc动态申请了
------解决方案--------------------
#define定义的就是常量
编译即确定值,
也许你想的是对的,但我感觉你表达的欠妥,好像#define的定义的M还能是变量似得。
即便定义#define M 3*4+2
什么的,也没有问题,还是那句话,define在编译阶段完成,所以M必然是常量
探讨
没问题啊

不过注意了

#define M 5

如果这个M是函数得出的,运行后的变量就不能这么声明了 char *a[M];