我需要創建一個包含二維數組的結構,但是數組大小可能會有所不同,所以我無法用一個常量來定義它。我試圖用雙指針來解決這個問題,只是爲了找出雙指針與雙數組不同。那我該怎麼做呢?如何在C結構中使用二維數組?
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]'),儘管你最好在結構中明確記錄數組大小。這或多或少是微不足道的。如果有的話,替代品是混亂的。 –