在c ++中声明一个类型为struct的2D数组

时间:2012-12-12 20:23:42

标签: c++ struct multidimensional-array

我声明了一个应该是像素的结构,它有3个属性(xy位置和F强度),如下所示:

struct pixel {
    int F,          // intensity from 0-255
    x,              // horizontal component           
    y;              // vertical component
};

然后我声明了像素类型的2D数组(上面的结构),如下所示:

int N=100;
pixel image[N][N];

然后我使用以下循环将值分配给xy

int count, k;

for (int i=0 ; i<N ; i++)
    for (int j=0 ; j<N ; j++)
    {
        k = j + i*N;
        image.x[k] = count;
        count++; 
     }

我做错了什么?

4 个答案:

答案 0 :(得分:4)

您可以使用ij索引image

    image[i][j].x = count;

我不明白为什么你需要k和显式索引计算。编译器会自动为您完成。

答案 1 :(得分:2)

您正在尝试索引结构的字段而不是结构本身,而且您没有将其索引为2D数组。

而不是:

image.x[k]

执行:

image[i][j].x

此外,您的代码是否已编译?有些编译器会拒绝一个数组的声明,其中的边界是变量,即使是const。

答案 2 :(得分:2)

该行

image.x[k] = count;

不正确。您声明了一个2D像素数组:

pixel image[N][N];

访问数组元素的方法如下:

image[i][j].x = count;

您不需要自己计算平坦指数k。

答案 3 :(得分:0)

首先,'k'未定义。因此,它将使用k的垃圾值。

此外,要索引图像中的点,您必须使用:

image[i][j]

因此,您的计划中的更正将是:

image[i][j].x = count;

而不是image.x[k] = count;