int *p=new int[2];
int *p=new int[2][3]; //错误
int (*p)[3]=new int[2][3]; //正确
int (*p)[4][5]=new int[2][4][5]; //正确
为啥第二行就错误呢?其实我们可以这样理解:
- int(p)[3]其中p是指针,这是毋庸置疑的,那这个指针指向什么类的数据呢?我们改一下写法,编程int[3] (p),是不是就很简洁明了呢?p指向的类型是int[3]。
- new int[2][3]返回的2个int[3]类型的数组的首地址,赋值给p。
- 同理,第四行p指向的类型是int[4][5],new int[3][4][5]返回的是3个int[4][5]类型的数组的首地址,赋值给p。
- 针对第一行的情况,如果p的一开始地址为1000,假设int占用4个字节,那么执行p++以后,p的地址为1000+4,第三行的情况,如果p的一开始地址为1000,进行p++以后,p的请值为1000+43,以此类推,第四行p++以后p的值为1000+44*5
参考:
[1] https://blog.csdn.net/u012397189/article/details/78784928
网友评论