C++基础:指针,函数指针
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | /*变量指针,函数指针 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; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2009-07-14 探秘System.Threading系列 第二篇:还是Thread,Thread.Start 和 Thread.Join