【问题标题】:Function returning an address of the greatest element in the array函数返回数组中最大元素的地址
【发布时间】:2014-04-02 18:24:59
【问题描述】:

不知何故,这段代码不起作用,我得到垃圾号码作为结果。你们可以看看吗?

float * greatest(float *elements,int length){

float max=elements[0];int index=0;

for (int i = 1; i < length; i++)
{
    if(max<elements[length]){
        max = elements[length];
        index = length;}
}
return &elements[index];
}

【问题讨论】:

  • 您在循环中使用length,您希望i

标签: c++ arrays pointers function-pointers


【解决方案1】:
if(max<elements[length]){

总是会返回最后一个元素,因为长度永远不会改变。你想要的

if(max<elements[i]){

【讨论】:

  • 我太傻了,我不敢相信我没有早点看到这个..谢谢
【解决方案2】:

除了索引错误(elements[length]而不是elements[i]),C++已经has that built in,无需重新发明轮子:

#include <algorithm>
//...
float * greatest(float *elements,int length){
    return max_element(elements, elements+length);
}

【讨论】:

  • 我知道是这样,但我们用这些东西在我的大学里练习指针
  • @SandroLivaja 在这种情况下,您可能会对&amp;elements[index] = elements + index 这一事实感兴趣。顺便说一句,你没有问你的代码有什么问题。我看了看,认为这不是一个特别好的方法,所以我建议了一个更好的方法;)
  • 我们的教授不允许我们使用内置函数。他希望我们思考并找到我们自己的解决方案。他认为这样我们会变得更好。这个事实很有趣,我会在课堂上分享。谢谢
【解决方案3】:

正确的形式是:

float * greatest(float *elements,int length){

float max=elements[0];int index=0;

for (int i = 1; i < length; i++)
{
    if(max<elements[i]){
        max = elements[i];
        index = i;}
}
return &elements[index];
}

【讨论】:

    猜你喜欢
    • 2020-02-28
    • 1970-01-01
    • 2021-03-11
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多