/*变量指针,函数指针 http://www.cnblogs.com/yukaizhao/ */ #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; }
原文链接: https://www.cnblogs.com/yukaizhao/archive/2010/07/14/cpp-pointer.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/12704
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!