char** strNumbers = (char**)(new int[length]) 是什么意思?

char** strNumbers = (char**)(new int[length])
这句话的意思是说申请了 length 个 int 大小的空间给 strNumbers 用吗?
如果是的话为什么不用 char** strNumbers = (char**)(new char[4*length]) ?

 正确的写法是
char** strNumbers = new char*[前面一维数组的长度];
但是你那样可以强制转换,在假设计算的字节长度正确的情况下,也可以那么写。强制指针转换根本不管你分配的是什么。

两种写法效果相同,但是比较奇怪,一般这么转换是为了在strNumbers++时只移动一个字节,
但上面的两种写法是达不到这个效果的,会移动4个字节。

为了移动一个字节,建议这么写:
char* strNumbers = (char*)(new int[length]);
或者
char* strNumbers = (char*)(new char[4*length]);