复制到另一个数组时数组的值更改

时间:2016-07-21 16:19:42

标签: c++ arrays arraycopy

我的目标是创建一个脉冲模式调制程序,接受振幅和时间周期,并将其更改为二进制 我调查了这个问题,发现我在一个函数中使用了局部变量,因此它超出了范围,更改了代码但问题仍然存在。 代码:

#include <iostream>
#include <cmath>
#define SAMPLE_SIZE 12

class sine_curve
{
public:


int get(double amplitude, double time, double *x, double frequency, int sample)
{
    for(sample = 0; sample <= time; sample++)
    {
        x[sample] = amplitude * sin(2 * 3.142 * frequency * sample);
        std::cout << x[sample]<<"\t";
    }

    std::cout << std::endl;
return *x;    }

};

int main()
{

double amplitude, time, frequency, x[SAMPLE_SIZE], y[SAMPLE_SIZE];
int sample;

std::cout << "Enter amplitude: ";
std::cin >> amplitude;
std::cout << "Enter time: ";
std::cin >> time;
sine_curve sine;
sine.get(amplitude, time, x, frequency,sample);

for(sample = 0; sample <= time; sample++)
{
    std::cout << x[sample] << std::endl;
}

std::cout << std::endl;

*y = *x;
for(sample = 0; sample <= time; sample++)
{
    std::cout << y[sample] << std::endl;
}
}

输出::     输入幅度:23
    输入时间:3
    0 1.00344e-307 2.00687e-307 3.01031e-307
    0
    1.00344e-307
    2.00687e-307
    3.01031e-307

0
   2.07377e-317
   5.61259e-321
   2.12203e-314

当我打印数组y​​时,值会发生变化。 我跟着this链接,其余的我不记得,但他们的回答也一样。

1 个答案:

答案 0 :(得分:1)

问题在于:

*y = *x;

问题是无法使用=复制数组。必须调用函数来执行此工作,无论是std::copymemcpy,您自己的for循环等。

为了缓解这种情况,您可以使用std::array代替常规数组,并且对代码进行最少的更改,因为std::array重载operator =,以便可以使用更多内容完成复制&#34;天然&#34;句法。

如果xy

std::array<double, SAMPLE_SIZE>

然后复制就是:

y = x;

Live Example using std::array

请注意,计算和未初始化的变量使用存在问题,这些问题超出了给定阵列复制问题的范围。您需要解决的问题。