gpt4 book ai didi

c++ - 数组和指针作为参数和返回值

转载 作者:行者123 更新时间:2023-11-28 07:01:53 25 4
gpt4 key购买 nike

#include <iostream>
using namespace std;

int getDegree()
{
int degree;
cout << "Enter degree of polynomial" << endl;

cin >> degree;

return degree;
}

int* getPoly(int degree)
{
cout << "Enter coefficients in order of power of x. e.g. for 2 + x + 3x^2, enter 2 then 1 then 3" << endl;

int coeff [degree +1];
for (int i = 0; i <= degree; i++)
{
cin >> coeff[i];
}

return coeff;
}

int* polyder(int p[], int degree)
{
int dp[degree];

for(int i = 0; i < degree; i++)
{
dp[i] = p[i+1] * (i+1);
}

return dp;
}

int main(int argc, const char * argv[])
{
int degree = getDegree();
int p = *getPoly(degree);
int dp = *polyder(&p, degree);

for(int i = 0; i < degree +1; i++)
cout << " " << p[i] << " x^" << i;
cout << endl;

for(int i = 0; i < degree +1; i++)
cout << " " << dp[i] << " x^" << i;
cout << endl;

return 0;
}

我在打印语句时遇到错误。我不担心涉及的数学,只担心如何在函数/方法之间传递数组。

谁能找到为什么这不起作用?我是 C++ 的新手,习惯了 Java。

最佳答案

Can anyone find why this is not working?

在 C++ 中,变量在声明它们的范围结束时被销毁。您返回函数结束时不存在的变量地址:

int* getPoly(int degree)
{
int coeff [degree +1];
// ...
return coeff;
}

如果你希望变量在函数结束后仍然存在,你必须使用new分配它:

int* getPoly(int degree)
{
int *coeff = new int[degree +1];
// ...
return coeff;
}

并且,在您的主函数结束时(或您不再需要该数组的任何地方),调用 delete[] 来释放内存:

int *p = getPoly(degree);
delete[] p;

数组名称本质上是指向数组第一个元素的指针(如您在上面的代码中所见,我已将 p 声明为指向 int),因此您只需提供它们的名称即可将它们传递给其他函数:

int* polyder(int p[], int degree){/*do something here*/}
// <-- some other code
int *p = getPoly(degree);
int* returnedArray = polyder(p,degree);

关于c++ - 数组和指针作为参数和返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22314623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com