首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

(int(*)[十])malloc(40*sizeof(int))

2013-12-04 
(int(*)[10])malloc(40*sizeof(int))int(*p)[10](int(*)[10])malloc(40*sizeof(int))malloc分配了160个

(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(*)[十])malloc(40*sizeof(int))
[解决办法]
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];
[解决办法]

引用:
五楼的”a[40][10]“有错吧,如果用二位数组表示的话,应该是a[4][10],现学现买咯,

是的,他自己在7楼更正了

热点排行