gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:31:46 24 4
gpt4 key购买 nike

我有一个函数可以在一些数据数组中搜索极值。它采用指向数据的指针、一些参数和指向存储结果的结构数组的指针。该函数返回结果结构数组的长度。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com