在函数

时间:2015-09-01 07:37:57

标签: c arrays pointers struct

我们已经创建了一个如下定义的结构hsv。

struct hsvoutput {
    float hue; // angle in degrees
    float saturation;
    float value;
};

struct hsvoutput hsv[img->x * img->y];

从图像尺寸中拉出尺寸。

int RGBtoH(int r, int g, int b, struct hsvoutput hsv, int i)
{

    float h;
    float s;
    float v;
    RGBtoHSV(r, g, b, &h, &s, &v);
    hsv.hue[i]= h;
    hsv.saturation[i] = s;
    hsv.value[i]= v;
    return h;
}

我们想要一种方法来获取RGBtoH函数,将hsv结构的第i个值设置为h,s和v值。此i值是来自调用此RGBtoH函数的循环的迭代值。

但是,如上所述尝试时会发生此错误。

  

错误:下标值既不是数组也不是指针,也不是向量

4 个答案:

答案 0 :(得分:4)

在您的结构定义中,

struct hsvoutput {
    float hue; // angle in degrees
    float saturation;
    float value;
};

huesaturationvalue不属于数组类型。你不能对它们使用索引。

所以,稍后,写

hsv.hue[i]= h;
hsv.saturation[i] = s;
hsv.value[i]= v;

是错的。它们都是单个变量,使用索引对它们无效。

解决方案:如果您希望将数组 hsv传递给您的函数,并更新所有元素的字段值,您应该执行类似的操作(伪代码)

int RGBtoH(int r, int g, int b, struct hsvoutput *hsv, int i)   
{                               //change hsv type to pointer

    float h;
    float s;
    float v;
    RGBtoHSV(r, g, b, &h, &s, &v);
    hsv[i].hue= h;                   //use indexing on hsv
    hsv[i].saturation = s;           //use indexing on hsv
    hsv[i].value= v;                 //use indexing on hsv
    return h;
}

答案 1 :(得分:1)

应该是:

hsv[i].hue = h;
...

int RGBtoH(int r, int g, int b, struct hsvoutput *hsv, int i)

你的情况下的数组是hsv,所以应该像这样索引。然后,您可以将指针传递给函数中的hsvoutput。

答案 2 :(得分:1)

您正在尝试将结构属性索引为数组,但是对于每个结构,它们只是单个实例,因此您不能像数组一样索引它们。您应该分配一个结构数组,然后将指针传递给该数组,这样您就可以访问该数组的第i个元素。请参阅下面的代码。

 int RGBtoH(int r, int g, int b, struct hsvoutput *hsv, int i)
    {

        float h;
        float s;
        float v;
        RGBtoHSV(r, g, b, &h, &s, &v);
        hsv[i].hue= h;
        hsv[i].saturation = s;
        hsv[i].value= v;
        return h;
    }

答案 3 :(得分:0)

由于hsv是数组,您应该将参数更改为指针类型,然后对指针进行索引而不是浮点数。像这样:

exec('bash -c /path/to/script.sh ' . $i .' ' .date('d').' '.date('m') . ' > /dev/null 2>&1 &"');