简笔画美女图片大全:C++指针函数问题
来源:百度文库 编辑:查人人中国名人网 时间:2024/05/06 08:05:59
#include "iostream.h"
int *findmax(int *array,int size,int *index);
void main()
{int a[10]={33,91,54,67,82,37,85,63,19,68};
int *maxaddr;
int idx;
maxaddr=findmax(a,sizeof(a)/sizeof(*a),&idx);
cout<<idx<<endl;
cout<<maxaddr<<endl;
cout<<a[idx]<<endl; }
int *findmax(int *array,int size,int *index) //本身要求返回一个整数
{ int max,i;
max=*(array+0);
for (i=1;i<size;i++)
if (max<*(array+i))
{
max=*(array+i);
*index=i;
}
return(array+*index); //返回地址指针
}
上面这个程序是对的。但我搞不懂的是为什么他的函数返回值和函数定义不一样。为什么还是可以通过编译。
请高手指教。
谢谢。
不知有没有高手愿意做我的师傅。本人刚刚开始学习c++
请高手说的详细些, 这个函数返回的类型和定义类型为什么不一样也行。
int *findmax(int *array,int size,int *index);
void main()
{int a[10]={33,91,54,67,82,37,85,63,19,68};
int *maxaddr;
int idx;
maxaddr=findmax(a,sizeof(a)/sizeof(*a),&idx);
cout<<idx<<endl;
cout<<maxaddr<<endl;
cout<<a[idx]<<endl; }
int *findmax(int *array,int size,int *index) //本身要求返回一个整数
{ int max,i;
max=*(array+0);
for (i=1;i<size;i++)
if (max<*(array+i))
{
max=*(array+i);
*index=i;
}
return(array+*index); //返回地址指针
}
上面这个程序是对的。但我搞不懂的是为什么他的函数返回值和函数定义不一样。为什么还是可以通过编译。
请高手指教。
谢谢。
不知有没有高手愿意做我的师傅。本人刚刚开始学习c++
请高手说的详细些, 这个函数返回的类型和定义类型为什么不一样也行。
返回值和定义都没有问题(他们两个是一样的),
对于函数int *findmax(...),其返回值要求是指向int型的指针,
return(array+*index)是给指针array加了一个偏移量*index,然后返回的,所以他还是一个指针。
看看数组和指针的关系(异同点),你应该会有收获的。
return(array+*index); //返回地址指针
array本身就是一个地址,*index是一个整数,地址加一个整数表示将指针指向array后面(*index) 个变量大小的地址,这是指针的算术运算,可以看一下这部分
另外指针和数组的使用其实是基本相同的(有一些差别)
比如你定义一个整形指针
int *array;
你也可以用数据来访问
array[0];