更新:从函数返回指向数组的指针

时间:2014-11-26 18:06:29

标签: c++ arrays pointers

我知道这与以前的问题类似,但我找不到合适的答案。

我正在尝试在函数中创建一个值数组,然后返回一个指向此数组的指针,以便在以后的函数和main函数中使用。我只是在理解如何正确发送和访问数组时遇到问题。以下是我的一部分代码(我只删除了不相关的部分)

#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std; 

double *PMS() {

  static double w[128];
  double dw = 0.05;
  int i; 

  for (i = 1; i <= M; i++) {
    w[i]  = dw + (2*i - 1) * (dw/2.0);
    cout << w[i] << endl;
    }

  cout << w[i] << endl;
  return w;
}

//======================================================================
void RandSea() { 
  double *omega;
  int i;

  omega = PMS();
 for (i = 0; i <=129;i++)
  cout << *omega << endl;
 }

int main() {
  data(values);
  Pierson_Moskowitz();
  RandSeaState();
}

数组未正确地从RandSea函数中的0x6021e0发送值cout<<omega<<endl;

omega的值只是零。

1 个答案:

答案 0 :(得分:1)

这里有很多事情需要注意: -

1)数组索引从0开始,以size-1结束。

2)cout << omega << endl;

这将打印数组的基地址。

你应该使用: -

omega = PMS();
for ( int i = 0; i < 129; i++ )   <<<<Here 129 should be the number of elements array has
{
   cout << *(omega + i) << endl;
} 

3)您正在将数组的地址返回给调用者。如何知道数组中有多少元素。

&#34;我的第二个问题是,我也很难理解*和&amp; amp;之间的区别。指针&#34;

&amp;被称为&#34;地址&#34;运营商。它用于获取对象的地址。并且&#39; *&#39;是&#34;地址为&#34;指针上下文中的运算符。