繁体   English   中英

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

[英]Pointer to array of structs element field in a function

我有一个在某些数据数组中搜索极值的函数。 它需要指向数据的指针,一些参数以及指向存储结果的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个struct字段的引用感到困惑,无法将结果放入其中。 难道我做错了什么?

您正在尝试使用指针来提高智能,因此您的代码甚至无法编译。

不要在各处使用*(data + i)*(data+j) ,而要使用data[i]data[j] 它们是等效的,使用数组时,第二个通常更易读(假设调用者传递的data实际上是float数组(的第一个元素的地址))。

您问的问题是此代码

struct result pointer = p + k;
pointer.amplitude = *(data + i);
pointer.position = i;

其中p是指向作为struct result传递给函数的struct result的指针。 在这种情况下, pointer实际上需要是一个真实的指针。 假设您希望它指向p[k] (而不是创建单独的struct result ),则可能需要执行

struct result *pointer = p + k;    /*   equivalently &p[k] */
pointer->amplitude = data[i];
pointer->position = i;

这将使代码得以编译。 请注意,您尚未描述该功能实际上应实现的功能,因此,我不必费心检查代码是否确实做了明智的事情。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM