读书人

数组动态分配挟制类型转换

发布时间: 2013-07-04 11:45:40 作者: rapoo

数组动态分配强制类型转换
二维数组动态分配,n1为列数,n2为行数,p[i2] = (char*)p[0]+size*n1*i2语句中为什么要用char *p强制类型转换,前面不是定义了void **p;吗

/* allocate a 2-d array */
void **alloc2 (size_t n1, size_t n2, size_t size)
{
size_t i2;
void **p;

if ((p=(void**)malloc(n2*sizeof(void*)))==NULL)
return NULL;
if ((p[0]=(void*)malloc(n2*n1*size))==NULL)
{
free(p);
return NULL;
}
for (i2=0; i2<n2; i2++)
p[i2] = (char*)p[0]+size*n1*i2;
return p;
}

[解决办法]
p[i2] = (char*)p[0]+size*n1*i2;
如果不加(char*),你想一下,指针的运算,(int*)p+1与(char*)p+1是不同的,一个加了4个字节,一个加了1个字节,假如是(void*)p+1的话你认为是加几个字节呢?

读书人网 >C语言

热点推荐