【发布时间】:2018-02-22 21:10:57
【问题描述】:
我需要创建一个包含 2D 数组的结构,但是数组大小可以变化,所以我不能用恒定长度定义它。我试图用双指针解决这个问题,只是发现双指针与双数组不同。那我该怎么做呢?
struct GaussianKernel {
int r;
double weightSum;
double **kernel;
};
GaussianKernel initializeKernel2D(jdouble sigma){
int r = (int) ceil(3 * sigma);
int kernelLen = 2 * r + 1;
double G[kernelLen][kernelLen];
double weightSum = 0;
double temp;
for (int y = -r; y <= r; y++)
{
for (int x = -r; x <= r; x++)
{
temp = exp(-(pow(x, 2) + pow(y, 2)) / (2 * pow(sigma, 2))) / (2 * PI * pow(sigma, 2));
G[y + r][x + r] = temp;
weightSum = weightSum + temp;
}
}
struct GaussianKernel GKernel;
GKernel.r = r;
GKernel.kernel = G;
GKernel.weightSum = weightSum;
return GKernel;
}
【问题讨论】:
-
请注意,您的代码试图返回一个指向局部变量的指针——这是非常错误的。您将需要使用动态分配。您对该结构的使用位置有多少控制权?你将传递给你没有编写的函数什么?一种选择是简单地分配一个大小合适的
double值向量,然后使用表达式gk->kernel[row * (2 * gk->r + 1) + col](而不是gk->kernel[row][col])对其进行索引,但最好在结构中明确记录数组大小。这或多或少是微不足道的。替代品(如果有的话)很混乱。
标签: c multidimensional-array struct