函数声明中的指针

int  a:

  a是一个int型变量

int  func():

  func是一个返回int类型的无参函数

int  *a:

  a是一个指向int类型变量的指针

int  *func():

  相当于int  *(func()),func是一个函数,返回值为指向整型的指针

  *不是用来定义func,说明返回值是指针

int (*func)():

  func是一个指针,指向一个返回值类型为int的无参函数

  *用来定义指针,与返回值无关

小结:

先判断是函数还是指针

函数:其后()里的是参数,函数名前所有符号都说明了返回值

指针:如果后面有(),说明是函数指针,不包括*的前面所有的符号说明了指向的函数的返回类型

关于类型转换:

例1: 某个类型a想转换成int a

  (int)a,即(int)表示向int的强制转换

例2: 某个类型a想转换成 int *a

  (int *)a,即(int *)表示向指向int的指针的强制转换

例3: 某个类型a想转换成int (*a)(int)

  (int (*)(int))a,即(int (*)(int))表示向 指向 以int为参数返回int型的函数 的指针 的强制转换

例4: (void (*)())

  添加变量名a,去掉最外面的括号得到:void (*a)()

  表示指向返回为void的无参函数的指针,

  所以原式表示向 指向返回void的无参函数的指针 的强制转换

例5: 将常数0强制转换为 指向 返回值为void的无参函数 的指针

  (void (*)())0 0被强制转换成一个函数指针

  如果 #define fp (void (*)())0

 则fp将成为一个指针,这个指针指向一个返回值为void的无参函数

  调用这个函数:(*fp)()

  即:(*(void (*)())0)()

  解读:将0强制转换成函数指针后再解引用调用这个函数

例6: 如果一个函数的返回值是一个函数指针

  这个函数名:signal,函数参数:(int,void (*func)(int))

  返回值:void (*a)(int)

  那么这个函数的定义:

  void (*signal(int,void(*func)(int))(int)

时间: 2024-10-13 14:57:44

函数声明中的指针的相关文章

函数声明中的强制类型转换

如何写一个程序使得微处理器在启动时自动调用0位置处的子例程呢? 首先我们要找到这样的一个位置,的办法就是用一个指针指向该位置,而该位置正好又是一个我们所需要的任意类型的函数,那么问题就能得到解决.假设我们有一个指向该位置的函数指针,其类型为空.如:(*fp)().现在最重要的问题就是如何让fp指向0位置处. 我们想到了类型的强制转换.比如将整数0,转换为指向空类型的函数的指针(void(*)())0,这个指针的含义与fp的类型完全相同,我们的目的就是用它来替换fp. 所以这段代码可以写成((vo

C语言中的函数、数组与指针

1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:  函数是C语言代码的基本组成部分,它是一个小的模块,整个程序由很多个功能独立的模块(函数)组成.这就是程序设计的基本分化方法: (1) 写一个函数的关键: 函数定义:函数的定义是这个函数的实现,函数定义中包含了函数体,函数体中的代码段决定了这个函数的功能: 函数声明:函数声明也称函数原型声明,函数的原型

“函数声明”、“函数原型”与“函数定义”辨析

最近在看一本关于C的书,对函数声明和函数定义的定义很是模糊,分不清楚,百度了一下,发现一篇帖子写的很是不错,转载过来: 原文: 对函数的“定义”和“声明”不是一回事.函数的定义是指对函数功能的确立,包括指定函数名,函数值类型.形参及其类型以及函数体等,它是一个完整的.独立 的函数单位.而函数的声明的作用则是把函数的名字,函数类型以及形参的类型.个数和顺序通知编译系统,以便在调用该函数时进行对照检查(例如,函数名是否 正确,实参与形参的类型和个数是否一致),它不包括函数体.————谭浩强 ,<C程

函数——函数的两种声明方式:函数声明&amp;函数表达式的区别(未完待续。。。)

一.函数声明中函数名是必须的:函数表达式中则是可选的 //函数声明 function sum(a, b) { return a + b; } alert(sum(1, 2)); //函数表达式 /* var s = function sum(a, b) { return a + b; } alert(s(1, 2)); */ var s = function(a, b) { return a + b; } alert(s(1, 2)); //以上两种都可以 二.用函数声明定义的函数,函数可以在函

IE6 IE7 IE8 的函数声明和函数表达式的实现与其他浏览器有差异

标准参考 函数声明和函数表达式 定义一个函数有两种途径:函数声明和函数表达式. 函数声明: function Identifier ( FormalParameterList opt ) { FunctionBody } 函数表达式: function Identifier opt ( FormalParameterList opt ) { FunctionBody } ECMAScript 根据上下文来区分函数声明和函数表达式,假设 "function test(){}" 是一个表达

php中使用指针进行函数操作

数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素.默认是指向数组中第一个元素通过移动或改变指针的位置,可以访问数组中的任意元素.对于数组指针的控制PHP提供了以下几个内建函数可以利用. current():取得目前指针位置的内容资料.key():读取目前指针所指向资料的索引值(键值).next():将数组中的内部指针移动到下一个单元.prev():将数组的内部指针倒回一位.end():将数组的内部指针指向最后一个元素.reset():将目前指针无条件移至第一个索引位置. 这些函数的参

声明返回数组指针的函数

时间:2014.05.18 地点:基地 ------------------------------------------------------------------------ 一.基本知识 常识:数组不能被拷贝,函数不能返回数组,只能返回数组的指针或者引用. typedet int arr[10]; //arr是类型别名,表示的类型含有10个整数的数组 上述语句等效于 using arr=int[10] 在来复习几个基础知识 int arr[10]; //arr是一个含有10个整数的数

Effective c++(笔记) 之 类与函数的设计声明中常遇到的问题

1.当我们开始去敲代码的时候,想过这个问题么?怎么去设计一个类? 或者对于程序员来说,写代码真的就如同搬砖一样,每天都干的事情,但是我们是否曾想过,在c++的代码中怎么样去设计一个类?我觉得这个问题可比我们"搬砖"重要的多,大家说不是么? 这个答案在本博客中会细细道来,当我们设计一个类时,其实会出现很多问题,例如:我们是否应该在类中编写copy constructor 和assignment运算符(这个上篇博客中已说明),另外,我们是让编写的函数成为类的成员函数还是友元还是非成员函数,

(C++)函数参数传递中的一级指针和二级指针

(C++)函数参数传递中的一级指针和二级指针 主要内容: 1.一级指针和二级指针 2.函数指针传递的例子 3.什么时候需要传递二级指针? 4.二级指针在链表中的使用 1.一级指针和二级指针 一级指针:即我们一般说的指针,就是内存地址: 二级指针:指向指针的指针,就是地址的地址: 如: int a=1; int *p=&a; // p为a变量的地址,通过*p可以得到a的值 int **q=&p; // q为p指针的地址,通过**q可以得到a的值 2.函数指针传递的例子 程序1: 1 2 3