C++返回指针

C++返回指针,c++,C++,我正在尝试编写一个程序,它将:函数返回一个指向双值数组最大值的指针。如果大小为0,则返回特殊指针值NULL或0 我不确定我的逻辑是否正确,或者函数是否返回地址或temp的值 const double * pMax(const double a[], size_t size){ double * ptr; for(size_t i = 0; i < size; i++){ if(a[i] > a[i+1]){ ptr = a[

我正在尝试编写一个程序,它将:函数返回一个指向双值数组最大值的指针。如果大小为0,则返回特殊指针值NULL或0

我不确定我的逻辑是否正确,或者函数是否返回地址或temp的值

const double * pMax(const double a[], size_t size){

    double * ptr;

    for(size_t i = 0; i < size; i++){
        if(a[i] > a[i+1]){
            ptr = a[i];
           }
       }      
    return ptr;
}
错误:无法将赋值中的“const double”转换为“double*” ptr=a[i]

去掉temp变量:永远不要在函数中返回指向局部变量的指针,因为调用方收到返回的指针时,它指向的变量已超出范围。相反,应该返回指向数组中某个元素的指针

要使用的算法概述:

将ptr初始化为NULL。这是默认值,直到通过检查数组中的至少一个数字来更改为止。 使用循环遍历数组。如果数组为空,即大小为0,则循环将运行零次。 每次通过循环时,如果ptr为NULL或它指向的值,即*ptr小于当前数组元素,请将ptr更改为指向当前数组元素。这将使它最初指向第一个值,然后在找到更大的值时修改它以指向不同的元素。 循环完成后,ptr指向循环找到的数组中最大的元素。如果循环因为大小为0而没有运行任何迭代,则ptr仍然为NULL。无论哪种方式,这都是您想要的结果,因此请返回它。
您需要将ptr初始化为NULL,以处理数组不包含任何元素的情况。对于所有其他情况,它遍历数组,找出指向max元素的指针并返回该指针。此外,在程序片段中,如果数组中的最后一个元素是最大的,则它不会计算指向该元素的指针。因为,当循环结束于i==size-1时,[i+1]将导致数组索引超出范围,这是有风险的。以下是更正的版本:

const double * pMax(const double a[], size_t size){
 const double * ptr = (size == 0) ? NULL : &a[0];
 for(size_t i = 1; i < size -1; i++){
  if (a[i] > *ptr){
    ptr = &a[i];
  }
 }      
 return ptr;
}

永远不要返回指向局部变量的指针。这是一个类似函数的参考实现,我不确定你的代码中有哪一行是正确的。您没有找到最大值,也没有返回指向它的指针,或者在大小为0时返回NULL。在代码的当前版本中,ptr=&a[i]。指针需要知道它们指向的对象的地址,而不是存储在那里的值。我试着按照你说的做,但知道不能在赋值ptr=a[I]中将“const double”转换为“double*”@Hidden然后将ptr设为const double*,您需要获取程序段中[i]的地址,如果数组中的最后一个元素是最大的,它不会计算指向该元素的指针。因为,当循环结束于i==size-1时,[i+1]将导致数组索引超出范围,riskySnippet?你是指我的算法,还是原始问题中的代码?OP的代码根本不起作用,但是这个答案中的算法应该正确处理最后一个元素是最大的。