关于这个代码,我有两个问题。
double*** pdata和int*** pmask是什么意思?指向指针的指针?为什么或者何时这个necessary?int和double是不同的类型,但是double*和int*也是不同的。我们能在没有石膏的情况下对它们进行手术吗?下面是我困惑的代码:
static int makedatamask(int nrows, int ncols, double*** pdata, int*** pmask)
{ int i;
double** data;
int** mask;
data = malloc(nrows*sizeof(double*));
if(!data) return 0;
mask = malloc(nrows*sizeof(int*));
if(!mask)
{ free(data);
return 0;
}
for (i = 0; i < nrows; i++)
{ data[i] = malloc(ncols*sizeof(double));
if(!data[i]) break;
mask[i] = malloc(ncols*sizeof(int));
if(!mask[i])
{ free(data[i]);
break;
}
}
if (i==nrows) /* break not encountered */
{ *pdata = data;
*pmask = mask;
return 1;
}
*pdata = NULL;
*pmask = NULL;
nrows = i;
for (i = 0; i < nrows; i++)
{ free(data[i]);
free(mask[i]);
}
free(data);
free(mask);
return 0;
}发布于 2011-08-04 20:30:23
A) A*可以是指向指针数组的指针,也可以是指向指针的二维数组
( B) int和double是不同的类型,没有强制转换就不能运行。
发布于 2011-08-04 20:31:36
双* pdata和int*p掩码是什么意思?指向指针的指针?
是。
什么时候有这个必要?
当像这个函数一样,您想通过指针返回指针到指针的值时.当然,您也可以通过值返回这些值,但是这个函数是通过指针来实现的,因为它“返回”多个指针。
int和double是不同的类型,但double*和int*也不同。我们能在没有石膏的情况下对他们动手术吗?
我不知道您的意思,但您不能期望将int*转换为double*,反之亦然;对于相同的值,int和double很可能在内存中有不同的表示形式(尽可能表示相同的值)和不同的大小。你还违反了C的“严格混叠”规则
double *p = WHATEVER;
int *q = p;https://stackoverflow.com/questions/6948112
复制相似问题