空指针与函数指针

空指针(void pointers)


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

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

#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
}

函数指针(Pointers to functions)


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

  函数指针声明形式:

int (*f)(int, int);

  传递函数参数的例子:

#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
}

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

时间: 2024-10-26 18:33:17

空指针与函数指针的相关文章

【转】 指针函数与函数指针的区别

一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量. 表示: float *fun();

深入理解 [指针函数] 、[函数指针]、[指针的指针]、[指向指针数组的指针]

指针函数 1.指针函数是指带指针的函数,即本质是一个函数.当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中. 函数返回类型是某一类型的指针: 格式: 类型标识符  *函数名(参数表) int *match(void *key_x,void *key_y); 解析:首先来说它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针

函数指针与指针函数

一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量. 表示: float *fun();

深入理解指针—&gt;指针函数与函数指针的区别

一. 在学习过程中发现这"指针函数"与"函数指针"容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量. 表示: f

函数指针和指针函数的区别

一. 在学习arm过程中发现这"指针函数"与"函数指针"容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量. 表示

(转)指针函数与函数指针的区别

一.在学习C过程中发现这"指针函数"与"函数指针"容易搞错. 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量. 表示: float *fun(); float *p; p = fun(a);

(转)空指针和野指针

本文目录 一.什么是空指针和野指针 二.野指针和空指针例子 一.什么是空指针和野指针 1.空指针 1> 没有存储任何内存地址的指针就称为空指针(NULL指针) 2> 空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0. 下面两个都是空指针: 1 Student *s1 = NULL; 2 3 Student *s2 = nil; 2.野指针 "野指针"不是NULL指针,是指向"垃圾"内存(不可用内存)的指针.野指针是非常危险的. 回到顶部 二.

指针函数与函数指针的区别(转)

原文:http://www.cnblogs.com/gmh915/archive/2010/06/11/1756067.html 函数指针的优势:在大中型程序编程中方便修改调用函数,若一个程序中调用了某一个函数5次,若后期对此修改:要将被调用函数改为另一个新编写的函数,则要找到5个地方分别修改,但是使用函数指针的话只需要修改1次即可. 一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函

指针函数与函数指针的区别

转自:http://www.cnblogs.com/gmh915/archive/2010/06/11/1756067.html 一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受