指向函数中结构元素字段数组的指针

时间:2016-09-05 11:29:39

标签: c++ arrays function pointers struct

我有一个函数可以搜索某些数据数组中的极值。它接受指向数据的指针,一些参数和指向存储结果的struct数组的指针。该函数返回结果struct数组的长度。

int FindPeaks(float *data, int WindowWidth, float threshold, struct result *p)
{
    int RightBorder = 0;
    int LeftBorder = 0;

    bool flag = 1;

    int i = 0;
    int k = 0;

    while(1)
    {
        flag = 1;
        if (WindowWidth >= 200) cout << "Your window is larger than the signal! << endl";
        if (i >= 200) break;
        if ((i + WindowWidth) < 200) RightBorder = i + WindowWidth;
        if ((i - WindowWidth) >= 0) LeftBorder = i - WindowWidth;
        for(int j = LeftBorder; j <= RightBorder; j ++)
        {
            if (*(data + i) < *(data + j))
            {
                flag = 0;
                break;
            }
        }
        if (flag && *(data + i) >= threshold && i != 0 && i != 199)
        {
            struct result pointer = p + k;
            pointer.amplitude = *(data + i);
            pointer.position = i;
            i = i + WindowWidth;
            k++;
        }
        else
        {
            i ++;
        }
    }

    return k;
}

我对第i个结构字段的引用感到困惑,将结果放在那里。我做错了吗?

1 个答案:

答案 0 :(得分:1)

你试图使用指针太聪明,所以你的代码甚至都不会编译。

不要在任何地方使用*(data + i)*(data+j),而是使用data[i]data[j]。它们是等价的,第二个在使用数组时通常更具可读性(假设调用者传递的data实际上是({1}}数组的第一个元素的地址)。

您询问的问题是此代码

float

其中struct result pointer = p + k; pointer.amplitude = *(data + i); pointer.position = i; 是指向作为参数传递给函数的p的指针。在这种情况下,struct result实际上需要是一个真正的指针。假设您希望它指向pointer(而不是创建单独的p[k]),您可能需要这样做

struct result

这将获得编译代码。请注意,您尚未描述该函数实际应该实现的内容,因此我没有费心去检查代码是否确实做了任何合理的事情。

请注意,您实际上(错误地)在C ++中使用C技术。现代C ++中有更好的替代方案,例如使用标准容器。