C++基础:指针,函数指针

/*变量指针,函数指针

*/
#include <iostream>
 
using namespace std;
 
//做函数声明,函数的实现可以在调用的后面,但是声明必须在调用的前面
int add( int , int );
int mutiple( int , int );
int doOperate( int a, int b, int (*opImp)( int , int ));
 
int main( void ){
     //声明一个变量
     int var = 100000;
 
     //输出变量的值
     cout<< "var's value = " <<var<<endl;
 
     //变量在内存中存储,每一个变量都有一个地址
     //通过&符号即可取得变量的地址
     cout<< "var's address = " <<&var<<endl;
 
     //取得地址的中存放数据的值,这儿应该输出1000
     //&var表示var变量的地址,*(&var)表示取出地址中的数值
     cout<<*(&var)<<endl;
 
     //声明指针型变量
     //下面的星号和上面的型号意思不同,上面的型号表示取出地址对应变量的值
     //而这里的*表示声明int类型的指针变量,intPointer是一个指针变量
     int * intPointer;
     int i=1000;
     intPointer = &i;   
     //下面将输出变量i的地址的值
     cout<< "intPointer = " <<intPointer<<endl;
     //下面将输出变量i的值
     cout<< "intPointer's variable value = " <<*intPointer<<endl;
 
     //可以通过指针赋值
     *intPointer = 999;
     //现在a的值是999
     cout<< "intPointer's variable value = " <<*intPointer<<endl;
 
     //但是不能用程序修改intPointer的值,下面一行代码是不允许的
     //intPointer = 9999999;
 
     //可以将指针指向另外一个变量
     int anotherVar = 987;
     intPointer = &anotherVar;
 
     //指针和数组的关系
     //这个数组的声明方式和c#中不同c#是int[] intArray = ..
     int intArr[] = {1,2,3,4,5,6};
 
     //现在可以将intArr赋给intPointer
     //现在intPointer是指向数组的第一个元素
     intPointer = intArr;
     //给数组的第三个元素赋值10
     *(intPointer+2)=10;
     //也可写成intPointer[2] = 10;
     //和下面语句是等价的
     //intArr[2] = 10;
     cout<< "intArr[2] = " <<intArr[2]<<endl;
 
     //指针的指针可以多加一个*号
     //指针本身也是一个变量需要在内存中存储,所以就有了指针的指针
     int ** pp = &intPointer;
 
     //函数指针
     //和c#的委托差不多了
     int sum = doOperate(1,2,add);
     cout<< "sum=" <<sum<<endl;
 
     int mut = doOperate(1,2,mutiple);
     cout<< "mut=" <<mut<<endl;
}
 
//声明函数指针的语法 返回值类型 (*变量名)(参数值类型1[,参数值类型2])
int doOperate( int a, int b, int (*opImp)( int , int )){
     return (*opImp)(a,b);
}
 
int add( int a, int b){
     return a+b;
}
 
int mutiple( int a , int b){
     return a*b;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值