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

标签 c++ arrays function pointers 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 个结构字段的引用感到困惑。我做错了什么吗?

最佳答案

您在尝试使用指针时过于聪明,因此您的代码甚至无法编译。

与其到处使用 *(data + i)*(data+j),不如使用 data[i]数据[j]。它们是等价的,第二个在处理数组时通常更具可读性(假设调用者传递的 data 实际上是(的第一个元素的地址)一个 float 数组)。

你问的问题是这段代码

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

其中 p 是指向作为参数传递给函数的 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++ 中有更好的替代方案,例如使用标准容器。

关于c++ - 指向函数中结构元素字段数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39329645/

相关文章:

C++ type_traits 模板,如果不是 const,则添加引用

c++ - 是什么导致了这个参数太少的错误?

javascript - 如何用数组中的值替换字符串中的字符?

arrays - 基于 Vlookup 确定的范围内的累积和

javascript - JS : Can I call a function with same scope as caller or do macro-like behavior

javascript - 将事件列表置于列表顶部

c++ - 如何制作节点图以与 Dijkstra 的最短路径一起使用?

c++ - 存储指向在方法中创建的对象的指针

c++数组打印十六进制?

javascript - 更改 JavaScript 原型(prototype)上的函数