Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 传递结构元素数组_C++_Pointers_Struct - Fatal编程技术网

C++ 传递结构元素数组

C++ 传递结构元素数组,c++,pointers,struct,C++,Pointers,Struct,我正在用计算机做一些向量计算。该库有一个复数类型,它是一个如下所示的结构: typedef struct { ne10_float32_t r; ne10_float32_t i; } ne10_fft_cpx_float32_t; 我想要一个函数,它将这些结构的数组(复数的1D数组)作为参数,并仅对数组的r或I元素执行向量计算。下面是一个获得想法的函数示例: void multiple_real_part_by_two(ne10_fft_cpx_float32_t* outp

我正在用计算机做一些向量计算。该库有一个复数类型,它是一个如下所示的结构:

typedef struct
{
    ne10_float32_t r;
    ne10_float32_t i;
} ne10_fft_cpx_float32_t;
我想要一个函数,它将这些结构的数组(复数的1D数组)作为参数,并仅对数组的r或I元素执行向量计算。下面是一个获得想法的函数示例:

void multiple_real_part_by_two(ne10_fft_cpx_float32_t* output, 
    ne10_fft_cpx_float32_t* input, ne10_uint32_t array_length)
{
    ne10_mulc_float_c (&output->r, &input->r, 2.0, array_length)
}
所以我希望输出数组和输入数组一样,但是每个r元素都应该乘以2。问题是,上面编写函数的方式不起作用,并导致分段错误。我认为问题在于如何将一个r元素数组传递给
ne10\u mulc\u float\u c()
函数

ne10\u mulc\u float\u c()
函数将指向两个大小为
array\u length
的类型为
ne10\u float32\t
的数组的指针作为参数。输入数组的元素乘以作为第三个参数传递的数字,结果存储在输出数组中。可以找到文档

我有办法做到这一点吗?我知道我可以做一个循环

for (int i = 0; i < array_length; i++) {
    output[i].r = input[i].r * 2.0
}
for(int i=0;i

但是我不想这样做,因为性能是至关重要的,这就是为什么我首先尝试使用NE10提供的向量运算。

问题是您提供了正确类型的
NE10\u mulc\u float\u c()
参数,但这些参数与假设不匹配

根据,该功能定义为:

ne10_result_t   ne10_mulc_float_c (ne10_float32_t *dst, ne10_float32_t *src, 
                                  const ne10_float32_t cst, ne10_uint32_t count)
有以下论点:

[out]   dst Pointer to the destination array
[in]    src Pointer to the source array
[in]    cst The constant to multiply by
[in]    count   The number of scalar values to be processed
这意味着函数假定dst和src是指向
count
连续浮点数数组的指针

不幸的是,您传递的参数并非如此:
&output->r
&input->r
都是指向单个浮点的指针。因此,只要这个函数尝试访问它期望的数组中的第二项,它的代码就会超出数组的实际边界,这就是UB。这就是为什么它不起作用,而你得到了分割错误

你的for循环很好。别忘了:


--


欢迎来到堆栈溢出。请花时间阅读和参考材料,从这里可以问什么,C或C++选择一个请。这些是不同的编程语言。问题是
&output->r
不是
ne10\u float\t
值数组的开始;它是指向结构数组中元素的指针。由于此原因,您无法将
ne10\u mulc\u float\u c()
函数用于此作业。我在这些文档中没有看到任何复数数组的乘法函数。您可能需要做一个循环。谢谢!这是我自己想的,但你的解释更清楚了。我想知道是否可以使用函数
ne10_mulc_vec2f_c()
,因为它将类型为
typedef struct{ne10_float32_t x;ne10_float32_t y;}ne10_vec2f_t
由于结构元素的类型相同,我能否将指向我的
ne10\u fft\u cpx\u float32\u t
数组的指针传递到此函数?文档在头文件中是相同的,我可以看到ne10_vec2f_t和ne10_fft_cpx_float32_t具有完全相同的结构(除了成员名称),因此您可以尝试这样做,因为这两个文件都具有相同的可复制布局。有了C,这很有可能奏效。使用C++时,如果函数是使用STD::Copy[]算法实现的,则有可能失败。在这两种情况下,这都不能保证起作用,例如,如果两种结构都会随着不同的隐藏成员发生不同的演变,