您的位置:首页 > 编程语言 > C语言/C++

C++学习之函数和指针

2017-01-10 21:39 169 查看
#include <iostream>
#include <string>

/**
*指针以及指针函数
*created by tengxign on 2017.1.10
*/
using namespace std;
//做函数声明,函数的实现可以在调用的后面,但是声明必须在调用的前面
int add(int,int);
int mutiple(int,int);
int doOperate(int a,int b,int (*opImp)(int,int));
int main(){
//声明一个变量
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: