编写一个函数,使用指针c+返回指向最大值的指针+; 这是我在C++中试图解决的问题。
编写一个函数,返回指向浮点数据数组最大值的指针:编写一个函数,使用指针c+返回指向最大值的指针+; 这是我在C++中试图解决的问题。,c++,pointers,C++,Pointers,编写一个函数,返回指向浮点数据数组最大值的指针:double*max(double*a,int size)。如果大小为0,则返回nullptr 我面临的问题是: 最终输出不是数组中最大值的正确位置 错误说明:“无法在初始化中将'double**'转换为'double*' 如果我在此代码中的任何一点使用nullptr,CodeBlocks会给我一个错误 #包括 使用名称空间std; //从函数返回指向位置的指针 双*最大值(双*a,整数大小) { double maxVal=a[0];//这是起
double*max(double*a,int size)
。如果大小为0,则返回nullptr
我面临的问题是:
nullptr
,CodeBlocks会给我一个错误#包括
使用名称空间std;
//从函数返回指向位置的指针
双*最大值(双*a,整数大小)
{
double maxVal=a[0];//这是起始最大值
double*max_pos=&a;//指向[0]中的值
//initialis]ze两个变量
对于(int i=0;imaxVal){
maxVal=a[i];
cout您显示的代码中有一些错误:
太糟糕了
当size
为0时,您没有按照指示返回nullptr
您试图用&a
(adouble**
)初始化max\u pos
(adouble*
),这是一个编译器错误
您正在将&maxNum
(adouble**
)传递到std::cout
,打印maxNum
变量本身的地址,而不是它指向的地址(找到的数组元素)。您需要传递maxNum
(adouble*
)如果要打印找到的元素的地址,或者如果要打印找到的元素的值,则传递*maxNum
(adouble
)
请尝试类似以下内容:
#include <iostream>
// return pointer to location from function
double* maximum(double *a, int size)
{
if (size == 0) return 0;
// initialize both variables
double* max_pos = a; // points to the value in a[0]
double maxVal = *max_pos; // this is the starting max value
std::cout << "max_pos = " << max_pos << " (" << maxVal << ")" << std::endl;
for(int i = 1; i < size; ++i){
if (a[i] > maxVal){
max_pos = &a[i];
maxVal = *max_pos;
std::cout << "max_pos = " << max_pos << " (" << maxVal << ")" << std::endl;
}
}
// return address
return max_pos;
}
int main()
{
const int arrSize = 5;
double myarr[arrSize];
std::cout << "Input " << arrSize << " floating point values for your array" << std::endl;
for(int i = 0; i < arrSize; ++i) { // loop to input values
std::cin >> myarr[i];
}
for(int j = 0; j < arrSize; ++j) {
std::cout << "Location for " << myarr[j] << " = " << &myarr[j] << std::endl;
}
double* maxNum = maximum(myarr, arrSize);
std::cout << "maxNum = " << maxNum << " (" << *maxNum << ")" << std::endl;
return 0;
}
nullptr
似乎没有定义,所以如果您尝试使用它,为什么不希望出现错误?double*max\u pos=&a;
在我看来有点奇怪。它获取指针的地址并尝试将其分配给指针,而不是指针的指针。您如何知道打印的地址是错误的?您如何知道正确的地址应该是:在最后一行中,指针的地址是“代码> >代码> NulLPTR</代码>,因为C++ 11的支持没有被打开,很可能丢失。请阅读。只是好奇,为什么你使用STL算法?我做的每一个类,我们从未显示过。@ RicardoMartinez,因为C++。类往往不教现实世界的C++,他们更多地关注于C语言,算法理论为STL所使用的东西(例如,一个例子,一个手动实现的代码:STD::Max(EngultEngEnter))/<代码>等等,而真实世界的真实程序员使用STL,它是标准化的,更安全,并且节省时间和精力。
#include <iostream>
// return pointer to location from function
double* maximum(double *a, int size)
{
if (size == 0) return 0;
// initialize both variables
double* max_pos = a; // points to the value in a[0]
double maxVal = *max_pos; // this is the starting max value
std::cout << "max_pos = " << max_pos << " (" << maxVal << ")" << std::endl;
for(int i = 1; i < size; ++i){
if (a[i] > maxVal){
max_pos = &a[i];
maxVal = *max_pos;
std::cout << "max_pos = " << max_pos << " (" << maxVal << ")" << std::endl;
}
}
// return address
return max_pos;
}
int main()
{
const int arrSize = 5;
double myarr[arrSize];
std::cout << "Input " << arrSize << " floating point values for your array" << std::endl;
for(int i = 0; i < arrSize; ++i) { // loop to input values
std::cin >> myarr[i];
}
for(int j = 0; j < arrSize; ++j) {
std::cout << "Location for " << myarr[j] << " = " << &myarr[j] << std::endl;
}
double* maxNum = maximum(myarr, arrSize);
std::cout << "maxNum = " << maxNum << " (" << *maxNum << ")" << std::endl;
return 0;
}
#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
const int arrSize = 5;
double myarr[arrSize];
std::cout << "Input " << arrSize << " floating point values for your array" << std::endl;
// loop to input values
std::copy_n(std::istream_iterator<double>(std::cin), arrSize, myarr);
for(int i = 0; i < arrSize; ++i) {
std::cout << "Location for " << myarr[i] << " = " << &myarr[i] << std::endl;
}
double *maxNum = std::max_element(myarr, myarr + arrSize);
std::cout << "maxNum = " << maxNum << " (" << *maxNum << ")" << std::endl;
return 0;
}