用指针作为函数形参实现函数,函数调用时实参为数组。
4.用指针作为函数形参实现函数,函数调用时实参为指针。
#include <iostream>
using namespace std;
void reverse(int *a,int n)
{
for(int i=0;i<n/2;i++)
{
int t = a[i];
a[i] = a[n-i-1];
a[n-i-1] = t;
}
}
int main()
{
int n,a[1000],*p;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
p = a;
reverse(p,n);
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
}
不知道你这个问题是否已经解决, 如果还没有解决的话:定义一个函数指针:
void (*a) (int b); //定义一个函数指针a
a是一个函数指针,既然是函数指针就可以把其它函数的地址赋值给a,如下:
int c (char c1); int c2 (char c2); int c3 (char c3); //任意普通函数
a = c; a=c2; a=c3; //函数注册
把函数c,c2,c3,赋值给函数指针a的操作就是函数注册,就是一个指针赋值应用而已。
void f (int i){ //某函数
a (i) ; //使用函数指针a,这时的a可以是c,c2,c3,具体看你给a指向哪
}
**a(i) 就是函数回调。**函数a指向的是函数c的地址,因为上面有做函数注册 。
使用指针作为函数形参来处理函数调用时实参为数组或指针的情况,可以通过以下几个步骤来实现:
double Avg(int *arr, int len)
{
double sum = 0.0;
for (int i = 0; i < len; ++i) {
sum += arr[i];
}
return sum / len;
}
在函数参数中,我们定义了一个int类型的指针变量arr,用于接收传入的数组的首地址,以及一个int类型的len变量,表示数组的长度。
int a[] = {1, 2, 3, 4, 5};
double avg = Avg(a, sizeof(a) / sizeof(a[0]));
在调用Avg函数时,将数组a的首地址传入,并通过sizeof运算符计算出数组元素的个数,再将其除以sizeof(int)的结果作为数组的长度传入。
在函数内部,使用指针来访问数组或指针中的元素。例如,在Avg函数中,我们使用arr[i]来访问数组中的元素。
如果需要在函数内部修改数组中的元素,可以使用指针来实现。例如,如果我们要编写一个函数,用于将一个数组中的所有元素都加1,可以这样实现:
void AddOne(int *arr, int len)
{
for (int i = 0; i < len; ++i) {
arr[i] += 1;
}
}
在AddOne函数中,我们使用arr[i] += 1来将数组中的元素加1。
void MinMax(int *arr, int len, int *minVal, int *maxVal)
{
*minVal = *maxVal = arr[0];
for (int i = 0; i < len; ++i) {
if (arr[i] < *minVal) {
*minVal = arr[i];
}
if (arr[i] > *maxVal) {
*maxVal = arr[i];
}
}
}
在MinMax函数中,我们使用minVal和maxVal来操作指针所指向的变量,将数组中的最小值和最大值赋值给它们,这样就可以在函数外部访问到该数组的最大值和最小值了。
通过上述步骤,我们可以使用指针作为函数形参来处理函数调用时实参为数组或指针的情况,并且通过指针来访问数组或指针中的元素,以及通过指针来传递数组或指针作为函数参数。