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

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

2013-07-04 
数组动态分配强制类型转换二维数组动态分配,n1为列数,n2为行数,p[i2] (char*)p[0]+size*n1*i2语句中为什

数组动态分配强制类型转换
二维数组动态分配,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的话你认为是加几个字节呢?

热点排行