//用指针的指针当二维数组请参考以下代码
#include
#include
int main(){
int **b;
b=(int **)malloc(sizeof(int *)*4); //二维数组b有4行
for(int i=0;i<4;i++) //替每行分配存储空间
b[i]=(int *)malloc(sizeof(int)*3); //二维数组b每行3列
for(int i=0;i<4;++i) for(int j=0;j<3;j++)
b[i][j]=i*j;
for(int i=0;i<4;++i) {
for(int j=0;j<3;j++)
printf("%5d",b[i][j]);
printf("\n");
}
for(int i=0;i<4;i++)
free(b[i]); //释放每行的存储空间
free(b);//释放b
return 0;
}
b=(int (*)[3])malloc(sizeof(int *)*3);的意思是“申请了12个字节,并把首地址强制为int (*)[3]型赋给b。现在假设b指向的地址是40000000H,那么b+1指向的地址就是4000000CH,已经跳过12个字节了,哪里还有b+2的位置?越界了!b[i][0]=234;的类型也与申请的不匹配——申请的空间是存放int (*)[3]型指针的,现在指针还没有确定值,就给指针指向的目标赋值了,自然也是错误的!你这样弄要干什么我没有看明白,所以不便改,只指出错误。