0
首先感謝給我一個這樣的手。我不是C++專家,但我已經在C做了一些工作。我的代碼問題是它不會正確顯示返回的數組值。C++返回的數組值不正確
一般來說,我的程序試圖做的是評估一個函數F(x),以表格格式顯示它,並找到它的最小值和最大值。我發現盡一切辦法,但是當我想顯示陣列F(X)的返回值,它在某種程度上得到了distorted.The第一個值總是例如像
cout << *(value+0) <<endl;
但下一個值正確與假設的f(x)不一樣。如果我的代碼沒有達到合適的標準,請提前提前打招呼,但是我現在已經把這個包裹了一段時間了。
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
#include <string>
#include <stdlib.h>
using namespace std;
float *evaluate();
void display();
void Min_Max(float *);
int main()
{
float *p;
evaluate();
display();
cin.get();
p = evaluate();
Min_Max(p);
return 0;
}
float *evaluate()
{
ofstream Out_File("result.txt");
int n=30;
float x [n];
float fx[n];
float interval = ((4-(-2))/0.2);
x[0]= -2.0;
for(n=0;n <= interval;n++)
{
fx[n] = 4*exp((-x[n])/2)*sin((2*x[n]- 0.3)*3.14159/180);
x[n+1] = x[n] + 0.2;
if (Out_File.is_open())
{
Out_File <<setprecision(5)<<setw(8)<<showpoint<<fixed<< x[n];
Out_File << "\t\t"<<setprecision(5)<<setw(8)<<showpoint<<fixed<<fx[n]<<endl;
}
else cout << "Unable to open file";
}
Out_File.close();
return fx;
}
void display()
{
ifstream inFile;
inFile.open("result.txt");
string line;
cout << " x\t\t\t f(x)"<<endl;
cout << "_______________________________________"<<endl;
while(getline (inFile,line))
{
cout<<line<<endl;
}
inFile.close();
}
void Min_Max(float *value)
{
int a=0;
for(a=0;a<=30;a++){
cout << *(value+a) <<endl;
*value =0;}
}
原諒我,但我不完全理解你的答案,英語不是我的第一語言,但讓我嘗試去了解它。你說,指針p只能訪問數組的第一個值?堆內存對我來說是新的,我已經看到了你給的例子,但我不明白如何使用它與我的代碼。最後,你的意思是「不要忘記隨後釋放它」。 –
你知道'變量作用域'嗎?這是確切的問題。當你創建一個局部變量時,它只存在於這些括號內{}'。當一個程序走出括號時,該變量不再存在。所以,你在括號內創建一個變量,將一個指針傳遞給外部,一旦你退出函數,這個指針就什麼也不指向。關於'堆內存',你可以繼續前進,谷歌'新'操作符,我相信你一開始就會發現其他所有相關的東西:) – Sam
更明確的一點:你在函數內部創建一個變量'fx', evaluate'。一旦函數開始工作,'fx'會立即創建,並在函數停止工作後立即死亡。所以,當函數正在工作時,你把內存地址'fx'(這只是一個數字)並從函數中返回。在'main'函數中,將變量'p'分配給內存地址。由於'evaluate'已經停止工作,所有'local變量'包括'fx'在這個時間點都不存在。 'p'具有創建'fx'的內存地址,但現在這個地址沒有任何內容。 – Sam