指针作为参数传递

如果想通过函数调用得到n个要改变的值,可以采取下面的步骤:
    ①在主调函数中设n个变量,用n个指针变量指向它们;
  ②编写被调用函数,其形参为n个指针变量,这些形参指针变量应当与主调函数中的n个指针变量具有相同的基类型;
  ③在主调函数中将n个指针变量作实参,将它们的值(是地址值)传给所调用函数的n个形参指针变量,这样,形参指针变量也指向这n个变量;
  ④通过形参指针变量的指向,改变该n个变量的值;
  ⑤在主调函数中就可以使用这些改变了值的变量。
例如:

#include <iostream>
#include <windows.h>
using namespace std;
void swap1(int *a,int *b);
void swap2(int *a,int *b);
void main(){
int a=10,b=20,c,*p1,*p2;
p1=&a;
p2=&b;
cout<<DWORD(&(*p1))<<endl;//取得是指针变量p1的地址
cout<<DWORD(&(*p2))<<endl;
cout<<" p1= "<<*p1<<" - " <<DWORD(&(*p1)) <<" p2="<<*p2<<" - " <<DWORD(&(*p2)) <<endl;//&(*p1)取得是指针变量p1所指向存储单元即a的地址
swap2(p1,p2);
cout<<" p1= "<<*p1<<" - " <<DWORD(&(*p1)) <<" p2="<<*p2<<" - " <<DWORD(&(*p2)) <<endl;
c=getchar();
}

//实参指针变量的地址没有改变,只是修改了指针变量所指向存储单元的值。
void swap2(int *a,int *b){
int temp;
temp=*a;//取形参指针所指向变量的值,然后进行交换
*a=*b;
*b=temp;
}
//运行结果:
// 2031340
// 2031328
// p1= 10 - 2031376 p2=20 - 2031364
// p1= 20 - 2031376 p2=10 - 2031364

 

 

请注意,不能企图通过改变形参指针变量的值而使实参指针变量的值改变。请分析下面程序:
#include <iostream>

using namespace std;
int main( )
{ void swap(int *p1,int *p2);
int *pointer_1,*pointer_2,a,b;
cin>>a>>b;
pointer_1=&a;
pointer_2=&b;
if(a<b) swap(pointer_1,pointer_2);
cout<<″max=″<<a<<″ min=″<<b<<endl;
return 0;
}

//调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。
//简单说就是改变了p1所指向变量的值,即a的地址改变了,但是内容没有。
void swap(int *p1,int *p2)
{ int *temp;
temp=p1;
p1=p2;
p2=temp;
}

 

### 将函数指针作为参数传递 在 C++ 中,可以通过多种方式将函数指针作为参数传递给其他函数。这允许实现更灵活的设计模式和回调机制。 #### 定义并声明带函数指针数的函数 为了接受一个函数指针作为数,目标函数需要指定该指针所指向类型的签名。例如: ```cpp // 声明接收两个整数及其运算操作符(通过函数指针)的函数 int applyOperation(int a, int b, int (*operation)(int, int)) { return operation(a, b); } ``` 这里 `applyOperation` 接受三个数:两个整数值以及一个名为 `operation` 的函数指针,后者应匹配 `(int, int)` 形式的原型[^1]。 #### 创建用于传递的实际函数 接下来定义具体执行某些计算逻辑的具体函数,这些函数将会被当作数传上述例子中的 `applyOperation` 函数内: ```cpp // 加法器函数 int add(int x, int y) { return x + y; } // 减法器函数 int subtract(int x, int y) { return x - y; } ``` 以上代码片段展示了两种简单的算术运算——加法与减法,并且每种都遵循了之前提到的形式数列表[(int, int)]。 #### 使用带有函数指针数的函数 最后,在实际应用中调用此函数时只需简单地提供相应的实即可完成整个过程: ```cpp #include <iostream> using namespace std; ... int main() { int resultAdd = applyOperation(5, 3, add); // 结果为8 int resultSubtract = applyOperation(5, 3, subtract); // 结果为2 cout << "Result of addition: " << resultAdd << endl; cout << "Result of subtraction: " << resultSubtract << endl; return 0; } ``` 这段完整的程序演示了如何创建、声明及使用含有函数指针形式数的方法来动态选择不同的行为路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值