【问题标题】:Declaring a 2D array of type struct in c++ [closed]在 C++ 中声明 struct 类型的二维数组 [关闭]
【发布时间】:2012-11-30 15:25:06
【问题描述】:

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

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

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

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++; 
     }

我做错了什么?

【问题讨论】:

  • 您遇到了什么问题?
  • 计数变量未初始化。一开始它几乎可以是任何东西(未定义的值),然后您只需递增该未定义的值。你不能指望变量会自动初始化为 0。
  • 欢迎来到 SO,像您一样发布您的代码非常有帮助,但始终尝试解释您遇到的问题......什么是/没有正常工作以及如何,您有什么错误可能会得到等...
  • 谢谢你!!很抱歉没有明确表达
  • 我从下面的答案中了解到出了什么问题,再次感谢

标签: c++ struct multidimensional-array


【解决方案1】:

首先,'k' 没有定义。因此,它将为 k 使用垃圾值。

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

image[i][j]

因此,您的程序中的更正将是:

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

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

【讨论】:

    【解决方案2】:

    线

    image.x[k] = count;
    

    不正确。您声明了一个二维像素数组:

    pixel image[N][N];
    

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

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

    你不需要自己计算平面索引k。

    【讨论】:

      【解决方案3】:

      您可以使用ij 来索引image

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

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

      【讨论】:

      • 好的,谢谢 :) 但是,如果我使用的是动态二维数组,我确实需要计算 k 对吗??
      【解决方案4】:

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

      而不是做:

      image.x[k]
      

      做:

      image[i][j].x
      

      另外,你的代码可以编译吗?一些编译器会拒绝边界是变量的数组声明,即使是 const。

      【讨论】:

        猜你喜欢
        • 2015-09-04
        • 2016-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多