【问题标题】:C++ pointers and for loopsC++ 指针和 for 循环
【发布时间】:2020-10-14 16:29:23
【问题描述】:

我刚开始使用 c++。我正在尝试运行正向欧拉,我在其中使用 for 循环和指针。但是我不明白怎么了?

#include <iostream>
using namespace std;

void euler(){
  int n = 10;
  double dt = 0.1;
  double *a=new double[n];
  double *v=new double[n];
  double *t = new double[n];


  int vr = 5;


  for (int i=0;i<n; i++){
    a[i+1] = vr + i;
    v[i+1] = v[i] + a[i+1]*dt;
    t[i+1] = t[i] + dt;

  }
  cout << v << endl;



}

int main(int argc, char const *argv[]) {
  euler();
  return 0;
}

终端给了我这个“0x7fce7cc017d0”

【问题讨论】:

  • 你的代码调用了未定义的行为。 avt 的允许下标范围为 0..(n-1)。然而,您的循环在所有三个数组中索引 1...n。
  • 并且它使用了v[0]t[0],它们当时是未初始化的。
  • 这里cout &lt;&lt; v &lt;&lt; endl;你正在打印数组v的地址
  • 首选std::vector,因为它可以动态扩展。数组是固定大小的。

标签: c++ for-loop pointers


【解决方案1】:

您打印的是 指针 本身,而不是它所指向的值。尝试以下方法之一:

cout << *v << endl;

for (int i=0;i<n; i++)
    cout << v[i] << endl;

此外,正如评论中所述,您的数组索引中不需要+1。顺便说一句,这不是在 C++ 中很好地使用指针。通常,除非确实需要,否则您不想使用指针。使用像您这样简单的代码,您可以简单地声明数组。

【讨论】:

【解决方案2】:
double *v=new double[n];

...

cout << v << endl;

V 是指向 n 个双精度数组的指针。

当您打印时,您正在打印指针的值。

这就是为什么你会得到像“0x7fce7cc017d0”这样的结果,因为那是指针的值。

如果你想打印出数组的值,你必须正确地索引它。

std::cout

【讨论】:

    【解决方案3】:

    如果你为vecotor实现operator &lt;&lt;,你可以让你的原始代码打印向量v的内容,例如这里:

    Overloading output stream operator for vector<T>

    【讨论】:

    • 我明白了!谢谢你的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2016-02-23
    相关资源
    最近更新 更多