十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
问题在你这个函数的定义参数void find(float a[],float *pmax,float *pmin)
公司主营业务:成都网站制作、网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出合作免费做网站回馈大家。
你在函数内对后2个参数直接进行了赋值。
{pmax=a[t];}
if(a[t]*pmin)
{pmin=a[t];}
你在函数内赋值并不会被外部的参数造成影响,你需要把用指针的引用才行
float* pMax, float* pmin
这样在函数内的赋值才有效果
因为数组的每一个元素在内存中是连续存放的,只要传递数据的首地址,你就可以根据对指针的"++"或--"操作,或直接在首地址上加上某个数,来得到数据其他的元素地址,然后用"*"操作符可以访问对应地址存放的数值。
比如,有如下这样语句:
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 定义数组a
int *p = a; // 使指针p指向数据的首地址,类似给函数传递首地址
1、使用"++"操作符,p目前指向的是数组首地址,那么p++之后,p就应该指向存放数组第二个元素的地址,这样就可以用*p得到第二个元素的值(2)。依此类推。
2、可以直接对首地址加某一个数,比如p+4,因为p指向数组首地址,所以p+4就是指向存放数据第五个元素的地址。这样就可以用*(p+4)得到第五个元素的值(5)。其实这里的*(p+4)与p[4]效果是一样的,只是写法上的不同而已,但是p[4]更直观一些,所以大部分编程人员都愿意用p[4]这种形式,因为它看其来像个数组,更好理解一些。
总而言之,用数组首地址可以访问数组的所有元素,就是因为可以通过对首地址的相加减来得到其他元素的地址,从而可以得到数组的每一个元素值。
这样说,你明白了吧。
如果还不太明白,那就看看谭浩强的《C语言程序设计》的“数组与指针”篇,那里写的很详细的(P210)
C语言中,函数参数只能传值。与传值对应的是传引用,C语言不支持函数参数传引用,C++语言才支持。
C++传引用函数:
void foo(int a) { a = 3; }
假如a = 2,执行foo(a)后,a = 3。
---
C语言可以模拟传引用,方法是通过指针来实现:
void foo2(int* ap) { *ap = 3; }
假如a = 2,执行foo2(a)后,a = 3
foo2(a)调用本质上仍然是传值,只不过传递的是指针,指针即是地址,地址本质上是一个无符号整数。
如果:
void foo3(int b) { b = 3; }
假如a = 2,执行foo3(a)后,a = 2。这是因为foo3(a)调用过程中,a值传给形参b,修改b的值与实参a无关。
注意到,foo3(a)与上述foo(a)传引用的调用是形式一样的。
既然C语言通过指针可以实现传引用调用,为什么C++还要引入引用这个特性呢?这是因为C++引入的很多新特性需借助引用来实现,比如,拷贝构造函数等等。