uc os相关的C语言知识点1-函数指针

开始读uc os的代码了,发现很多C语言的东西,之前没搞懂的,慢慢积累。

就象某一数据变量的内存地址可以存储在相应的指针变量中一样,函数的首地址也以存储在某个函数指针变量里的。这样,我就可以通过这个函数指针变量来调用所指向的函数了。

形式1:返回类型(*函数名)(参数表) ,例子如下:

#include<stdio.h>
void (*funp)(int);  //定义一个函数指针,注意函数的返回类型和参数类型和指针的一致,才可以用。
void print(int n);  //函数申明

int  main(void)
{
  funp=print; //指针赋值
  (*funp)(10); //调用

}

void print(int n)
{
    printf("%d\n",n);
}

形式2:typedef  返回类型(*新类型)(参数表)

不要以为typedef的只能这样用:typedef A B;

#include<stdio.h>
typedef void (*funp)(int); //这里不是定义一个具体的函数指针,是定义了一个新类型
void print(int n);  //函数申明
int  main(void)
{
  funp p;
  p =print; //指针赋值
  (*p)(10); //调用

}

void print(int n)
{
    printf("%d\n",n);
}

形式3:把这个函数指针,作为参数,传入另一个函数

#include<stdio.h>
void pp1(int);
void pp2(int);
void pp3(int);
typedef void (*funp)(int); //定义一个函数指针类型
void callpp(funp p,int n); //这个函数的一个参数是函数指针

void pp1(int n)
{
    printf("pp1 print out %d\n",n);
}

void pp2(int n)
{
    printf("pp2 print out %d\n",2*n);
}

void pp3(int n)
{
    printf("pp3 print out %d\n",3*n);
}

void callpp(funp p,int n)
{
    p(n);  //这里就是函数的运行了
}
int main()
{
    callpp(pp2,5);
    callpp(pp1,5);
    callpp(pp3,5);
}
时间: 2024-10-07 05:30:09

uc os相关的C语言知识点1-函数指针的相关文章

函数指针玩得不熟,就不要自称为C语言高手(函数指针是解耦对象关系的最佳利器,还有signal)

记得刚开始工作时,一位高手告诉我说,longjmp和setjmp玩得不熟,就不要自称为C语言高手.当时我半信半疑,为了让自己向高手方向迈进,还是花了一点时间去学习longjmp和setjmp的用法.后来明白那不单是跳来跳去那样简单,而是一种高级的异常处理机制,在某些情况下确实很有用. 事实上,longjmp和 setjmp玩得熟不熟与是不是C语言高手,不是因果关系.但是,如果可以套用那位高手的话,我倒想说如果函数指针玩得不熟,就不要自称为C语言高手.为什么这么说呢,函数指针有那么复杂吗?当然不是

0709 C语言常见误区----------函数指针问题

1.函数指针的定义 对于函数 void test(int a, int b){ // } 其函数指针类型是void (* ) (int , int), 注意这里第一个括号不能少, 定义一个函数指针,void (* pfunc)(int , int) ,其中pfunc就是函数指针类型, 它指向的函数类型必须是返回值为void, 参数为两个int的. 2.函数指针赋值 函数指针可以直接用函数名赋值,pfunc = test, 或者 pfunc = &test: 3.调用函数指针 pfunc(3, 4

C语言:通过函数指针来完成两个数的加减乘除(函数指针当做参数使用)

// //  main.c //  Function_pointer // //  Created by mac on 15/8/2. //  Copyright (c) 2015年 bjsxt. All rights reserved. //  要求:将函数指针做参数来求两个整数的和.差.积.商. //知识点:函数指针就是一个指向函数的指针,通过指针指向要调用的函数来完成操作.其实,这个指针就是指向函数的入口地址. //切记:要被调用的函数必须和函数指针的声明的一样(包括:返回值类型.参数个数

C语言:通过函数指针来完成两个数的加减乘除

// //  main.c //  Function_pointer // //  Created by mac on 15/8/2. //  Copyright (c) 2015年 bjsxt. All rights reserved. //  要求:通过函数指针求两个整数的和.差.积.商. //知识点:函数指针就是一个指向函数的指针,通过指针指向要调用的函数来完成操作. //切记:要被调用的函数必须和函数指针的声明的一样(包括:返回值类型.参数个数和类型) #include <stdio.h

1、C语言中的函数指针

一 通常的函数调用 1 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); 2 3 int main(int argc, char* argv[]) 4 { 5 MyFun(10); //这里是调用MyFun(10);函数 6 7 return 0; 8 } 9 10 void MyFun(int x) //这里定义一个MyFun函数 11 { 12 printf("%d\n",x); 13 } 这个MyFun函数是一个无返回值的函数,它

C语言学习019:函数指针

在C语言中,函数名也是指针变量,比如创建了一个add(int n,int m)的函数的同时也创建了一个名为add的指针变量,因此我们可以把函数指针当作一种类型为它赋值.当作参数传递等操作 C语言创建函数指针的公式: 返回类型 (*指针变量)(参数类型) 1 #include <stdio.h> 2 3 int add(int n,int m){ 4 return n+m; 5 } 6 7 int sub(int n,int m){ 8 return n-m; 9 } 10 11 int mai

策略设计模式与c语言中的函数指针

在C语言中有一个非常重要的概念-函数指针,其最重要的功能是实现回调函数(指函数先在某处注册,而它将在稍后某个需要的时候被调用)在java语言中没有指针的概念,但是可以利用接口和指针实现类似的功能,具体而言,应先定义一个接口,最后把这个实现类的一个对象作为参数传递给调用程序,调用程序通过这个参数来调用指定的函数,从而实现回调函数(这里接口就像是注册的地方,实现类就是“注册人”,当实现类作为形参时,就是在需要的时候) package strateryDemo; import java.util.Ar

【C语言】用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数

<pre name="code" class="cpp">//用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数 #include <stdio.h> int max(int x,int y) { return (x>y)?x:y; } int min(int x,int y) { return (x>y)?y:x; } int main() { int (*p)(int,int); int

C语言中的函数指针

1. 函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数. 2.函数指针的使用 我们定义了一个函数指针,但如何来使用它呢?先看如下例: #include <stdio.h> #include <string.h> char * fun(char * p1, char * p2) { int i = 0; i = strcmp( p1, p2 ); if (0 == i) { return p1 ; } else { return p2 ; } } int