调用函数的返回值中,能不能把内存地址返回?(有程序的,请帮忙)
题目:找出数组中元素的最大值,返回该最大值元素的内存地址和最大值元素在数组中的下标。
我写的程序是
#include<iostream>
using namespace std;
int *maxArr(int *arr,int n,int &idx)
{
idx=0;
for(int i=1;i<n;i++)
if(*(arr+i)>*(arr+idx))
*(arr+i)=*(arr+idx);
return (int*)(arr+idx);
}
int main()
{
int testArr[10]={3,4,56,7,8,98,67,4,8,94};
int *maxAddr,maxldx;
maxAddr=maxArr(testArr,10,maxldx);
cout<<"数组中的最大值:"<<maxAddr<<endl;
return 0;
}
编译没错,就是输出是个乱值,请各位帮忙,指教指教!
[解决办法]
你是怎么试的?
#include <iostream > using namespace std; int* maxArr(int *arr,int n,int &idx) { idx = 0; for(int i= 0; i <n; i++) { if(*(arr+idx) < *(arr+i)) { idx = i; } } return arr+idx;} int main() { int testArr[10]={3,4,56,7,8,98,67,4,8,94}; int maxldx = -1; int* maxAddr = maxArr(testArr, 10, maxldx); cout << "数组中的最大值:" <<*maxAddr <<endl; cout << "地址:" << maxAddr << endl; cout << "位置:" << maxldx << endl; return 0; }
[解决办法]
注意你编码的风格,
1. for/if的子句要用{}括起来
2. 少用*(arr+i),多用arr[i]
原来代码中的错误
1. 循环中*(arr+i)=*(arr+idx)错误,你这样修改了原来数组的值,且把凡是大于arr[0]的数全换成了arr[0],明显逻辑错误
2. 输出中你输出的是指针,而实际你想输出的是*maxAddr,而不是maxAddr
下面是正确代码
#include <iostream >
using namespace std;
int *maxArr(int *arr,int n,int &idx)
{
idx=0;
for(int i=1;i <n;i++)
{
if(arr[i] >arr[idx])
{
idx = i;
}
}
return arr+idx;
}
int main()
{
int testArr[10]={3,4,56,7,8,98,67,4,8,94};
int *maxAddr,maxldx;
maxAddr=maxArr(testArr,10,maxldx);
cout <<"数组中的最大值:" << *maxAddr <<endl;
return 0;
}