(int(*)[10])malloc(40*sizeof(int));
int(*p)[10]=(int(*)[10])malloc(40*sizeof(int));
malloc分配了160个字节空间,返回void* 再强制转换成“int(*)[10]”,int(*)[10]这不是数组指针吗?
然后怎么就每次p++后,p就移动40个字节,一团雾水啊,真不懂哦,那位能帮忙解释下,不胜感谢!!!(最好换个图)
[解决办法]
int(*p)[10]是一个数组指针,指向的类型是int [10]
当执行p++时,会使指针加一个sizeof(int[40]),也就是往后移40个字节
[解决办法]
int(*p)[10]是一个指向包含10个int元素的数组的指针,指向的类型是数组int[10], 所以当执行p++时,实际执行的是p = p + (int (*) [10])1 , 其步长为sizeof(int[10]), 所以是移动40个字节
[解决办法]
malloc就是分配160个字节的内存空间,int(*)[10] 将其转换为数组指针的形式
是只有4个int(*)[10]指针, p+4就是非法的了
[解决办法]
int(*p)[10]=(int(*)[10])malloc(40*sizeof(int));
a[40][10];
p+i means &a[i]
int *pp = (int*) (p+i);
pp+j means &a[i][j]
[解决办法]
糾正一下
a[40][10];
--> a[4][10];
[解决办法]