读书人

调用函数的返回值中能不能把内存地址

发布时间: 2012-02-26 20:19:44 作者: rapoo

调用函数的返回值中,能不能把内存地址返回?(有程序的,请帮忙)
题目:找出数组中元素的最大值,返回该最大值元素的内存地址和最大值元素在数组中的下标。
我写的程序是
#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;
}

编译没错,就是输出是个乱值,请各位帮忙,指教指教!

[解决办法]
你是怎么试的?

C/C++ code
#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;
}

读书人网 >C++

热点推荐