2次元配列を保持する構造体を作成する必要がありますが、配列のサイズが変わる可能性があるため、一定の長さで定義することはできません。私は二重ポインタでこれを解決しようとしましたが、ダブルポインタが二重配列と同じではないことがわかりました。だから私はこれをどのようにすることができますか?C構造体内で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;
}
ノートのロジックに従って
GKernel.kernel
に値を格納することができますローカル変数 - それはひどく間違っています。動的割り当てを使用する必要があります。この構造体がどこで使用されているかについて、あなたはどれだけのコントロールを持っていますか?あなたが書いていない関数に何を渡しますか? 'gk-> kernel [row *(2 * gk-> r + 1)+ col]'という式で索引付けするだけです。 > kernel [row] [col] ')、構造体に明示的に配列のサイズを記録する方が良いでしょう。それは多かれ少なかれです。可能であれば、代替案は乱雑です。 –