[英]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.