码迷,mamicode.com
首页 > 其他好文 > 详细

空指针与函数指针

时间:2014-06-11 12:56:24      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   http   tar   

空指针(void pointers)

  void 指针可以指向任意类型的数据。唯一的限制是被指向的值不能被直接引用(即不可以对它们使用解引符*),因为它的长度是不定的。

  因此,必须使用类型转换操作或赋值操作来把 void 指针指向一个具体的数据类型。

bubuko.com,布布扣
#include <iostream>
using namespace std;

void increase(void* data, int type)
{
    switch(type) 
    {
        case sizeof(char) : (*((char*)data))++; break;
        case sizeof(short): (*((short*)data))++; break;
        case sizeof(long) : (*((long*)data))++; break;
    }
}

int main()
{
    char a = 5;
    short b = 9;
    long c = 12;
    increase(&a,sizeof(a));
    increase(&b,sizeof(b));
    increase(&c,sizeof(c));
    cout << (int)a <<   << b <<   << c << endl;    //6 10 13
}
View Code

 

函数指针(Pointers to functions)

  函数指针即指向函数的指针。它最大的作用是把一个函数作为参数传递给另外一个函数。

  函数指针声明形式:

int (*f)(int, int);

  传递函数参数的例子:

bubuko.com,布布扣
#include <iostream>
using namespace std;

void add(int a, int b)
{
    cout << a+b << endl;
}

void del(int a, int b)
{
    cout << a-b << endl;
}

//函数指针del2指向函数del 
void (*del2)(int, int) = del;

//形参为函数指针,可接收不同的函数对象 
void compute(int a, int b, void (*f)(int, int))
{
    (*f)(a, b);
}

int main()
{
    //实参可为普通函数名,因为函数名本身就是一个地址 
    compute(2, 3, add);        //5
    
    //同上 
    compute(2, 3, del);        //-1
    
    //实参为函数指针
    compute(4, 1, del2);    //3
}
View Code

   顺便可参见以前写过的函数指针数组

空指针与函数指针,布布扣,bubuko.com

空指针与函数指针

标签:style   class   blog   code   http   tar   

原文地址:http://www.cnblogs.com/chenyg32/p/3772579.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!