- 指针&函数指针
指针为一个特殊的变量,它里面存储的数值被解释为内存里的一个地址。
指针类型、指针指向的类型、指针的值、指针本身所占据的内存区。
指针类型
int *ptr;//指针类型为int * char *ptr;//指针类型为char * int **ptr;//指针类型为int ** int (*ptr)[3];//指针类型为int (*)[3]
指针指向的类型
int *ptr;//指针指向类型为int char *ptr;//指针指向类型为char int **ptr;//指针指向类型为int * int (*ptr)[3];//指针指向类型为int ()[3]
指针的值
指针的值是指指针本身存储的数值,这个值被编译器当成一个地址。
指针所指向的内存区是指,从指针的值开始,长度为sizeof(指针指向的类型)的一片内存区。
指针本身所占据的内存区
指针本身占据了4个字节的长度。
指针的算术运算
指针+1数值为指针的值+sizeof(指针指向的类型),如果是数组则指向下一个元素
运算符&和*
&为取地址运算符,*是间接运算符
int a = 12; int b; int *p; int **ptr; p = &a;//取得a的地址,赋给p,即p指向a *p = 24;//取得p指向的内容,赋值为24,即a = 24; ptr = &p;//p本身为指针,&p为指针的地址,则ptr为int型变量,内容为p的地址 *ptr = &b;//*ptr为一个指针,&b为b的地址,即指针赋值为地址,*ptr指向b
函数指针
(1)简单的函数指针的应用
//形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(int a) { return 0; } void main(){ pFun = glFun; (*pFun)(2); }
第一行定义了一个指针变量pFun。根据形式1内容,这是一个指向某个函数的指针,其返回值为char类型,参数为一个int类型变量。
第二行按照常规方式定义了一个函数。
main中第一行给pFun赋值,进而使用。
(2)使用typedef方式
#include <iostream> using namespace std; typedef char (*PTRFUN)(int); PTRFUN pFun; char glFun(int a) { return a + '0'; } int main() { pFun = glFun; char tmp = (*pFun)(1); cout << tmp << endl; return 0; }
typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针。
私货:
5.2 10:36 开始阅读
5.2 19:43 好像来不及读完了,先把考点查出来搞定
5.17 23:05 我是脑残