babyfacekiller 发表于 2002-11-18 18:12

大家帮我看看,为什么不对。

调用findmax()函数,寻找数组中最大元素,将其下标通过参数返回,并返回其地址值。
# include<iostream.h>
int *findmax(int *array,int size,int *index);
void main()
{
int a={33,91,54,67,82,37,85,63,19,58};
int *maxaddr;
int idx;
maxaddr=findmax(a,sizeof(a)/sizeof(*a),&idx);
cout<<"the index of maximum element is"<<idx<<endl
      <<"the address of it is"<<maxaddr<<endl
      <<"the value of it is"<<a<<endl;
int* findmax(int array[],int size,int *index)
{
int *max=array;
int *temp=array;
for(int i=0;i<size;i++)
   {if (*max<*array)
      {temp=max;
       max=array;
       array=temp;
       }
    array++;
    }
int *index=max;
return max;
}   

13 C:\c++\8.1.cpp parse error before `{'
15 C:\c++\8.1.cpp `array' undeclared (first use this function)
                   (Each undeclared identifier is reported only once
16 C:\c++\8.1.cpp `size' undeclared (first use this function)
17 C:\c++\8.1.cpp `max' undeclared (first use this function)

谢谢!

babyfacekiller 发表于 2002-11-18 20:48

谢谢,不过好像不对。
我理解一旦把数组作为参数传递到函数中,则在栈stack上定义了指针(实际上传递的是一个指针指向数组的第一个元素),可以对该指针进行递增,递减操作。
比较下面两例:
void Sum(int array[],int n)
{
int sum=0;
for(int i=0;i<n;i++)
{
   sum+=*array;
   array++;//ok,array is a pointer,可以作为左值。
   }
cout<<sum<<endl;
}


int array;
int sum=0;
for(int i=0;i<100;i++)
{
sum+=array;
array++;//error,数组名是指针常量,不能作左值。
}

babyfacekiller 发表于 2002-11-18 21:06

对不起,发上一贴时没看到你的新贴。我用temp太笨了:D,谢谢你!!

数字蛋糕 发表于 2002-11-18 21:56

好像现在的开发工具都可以传递数组而无须考虑什么指针的问题。
至少我用Delphi是这样的。

所以,所以……觉得好像没有必要把这个问题搞得这么清楚……

随口说的,对此不负责任。

babyfacekiller 发表于 2002-11-20 21:14

谢谢
页: [1]
查看完整版本: 大家帮我看看,为什么不对。