函数指针与指针函数的使用与小结

简介: /* ============================================================================ Name : TestFunction.
/*
 ============================================================================
 Name        : TestFunction.c
 Author      : lf
 Time        : 2015年2月23日16:06:17
 Copyright   : Your copyright notice
 Description : 函数指针与指针函数的使用与小结

  在C语言中:
  函数名其实就是一个函数的起始地址.
  同理:数组名其实就是数组首元素的地址.


   函数指针
  在程序中定义了一个函数,那么在编译时编译系统为函数代码分配一段存储空间,
  这段存储空间的起始地址称为这个函数的指针.
  可定义一个指向函数的指针变量存放函数的起始地址,即该指针变量指向该函数.
  例如:
 int (*p)(int,int);
   定义p是指向函数的指针变量.它所指向的函数输入参数为两个int型,返回值为int型.
 p的类型用int (*)(int,int)表示

  指针函数
  函数返回值是指针.
  定义方式:
  类型名 *函数名(参数表列);


  小结:
  区分指针函数与函数指针最简单的方式:
  看函数名前面的指针*号有没有被括号包含,如果被包含就是函数指针,反之则是指针函数
  其实从字面意思也可以看出来些端倪:
  指针函数:本质是一个函数,返回值为一个指针的函数
  函数指针:本质是一个指针,只不过该指针指向了一个函数
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>

//声明sub函数
int sub(int a,int b);
//利用typedef定义sub的函数指针
typedef int (*subFunction)(int a,int b);



//声明一个指针函数
int *fu(int x);
//利用typedef定义一个指针函数的类型typedef
typedef int *func(int x);


int main(void) {
	testFunctionPointer();
	testPointerFunction();
	return EXIT_SUCCESS;
}

//函数指针
void testFunctionPointer() {
	//函数名其实就是一个函数的起始地址
	printf("sub function address=%x\n", sub);
	printf("======================\n");

	//利用函数指针调用sub方法
	subFunction s = sub;
	//此时s指向了sub函数的起始地址.所以打印结果同上
	printf("s function address=%x\n", s);
	printf("======================\n");
	s(9, 3);
}

int sub(int a,int b){
	int c;
	c=a-b;
	printf("sub result=%d\n",c);
	printf("======================\n");
	return c;
}


//指针函数
void testPointerFunction() {
	//方式一
	int number = 9527;
	int *p = fu(number);
	//取出地址中的内容*p
	printf("number=%d\n", *p);
	printf("======================\n");

    //方式二
	int num = 502;
	//注意这句
	func *f = fu;
	int *pointer = f(num);
	//取出地址中的内容*pointer
	printf("num=%d\n", *pointer);
	printf("======================\n");
}


int *fu(int x){
     int address=&x;
     return address;
}

相关文章
|
2月前
|
C++
定义和使用指向函数的指针变量
定义和使用指向函数的指针变量
15 1
|
1月前
|
搜索推荐 C语言 C++
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现3
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现
|
17天前
|
存储 C语言
指针数组作为main函数的形参
指针数组作为main函数的形参
13 0
|
29天前
|
C语言
指针数组以及利用函数指针来实现简易计算器及typedef关键字(指针终篇)
指针数组以及利用函数指针来实现简易计算器及typedef关键字(指针终篇)
|
2月前
|
安全 C语言 C++
字符指针做函数参数
字符指针做函数参数
10 1
|
2月前
|
安全 C语言
字符指针作函数参数的深入探索
在C语言编程中,字符指针是一个重要的概念,尤其在处理字符串和文本数据时。当我们将字符指针作为函数参数时,可以实现多种灵活和高效的操作。本文将深入探讨字符指针作为函数参数的应用,并通过代码示例加以说明。
15 1
|
2月前
|
存储 Shell C语言
指针数组组main函数的形参
指针数组组main函数的形参
10 0
|
2月前
|
C语言 C++
指针变量作为函数参数
指针变量作为函数参数
11 1
|
2月前
|
存储 Serverless 编译器
怎样定义和使用指向函数的指针变量
怎样定义和使用指向函数的指针变量
8 0
|
2月前
|
C++
用指向指针函数作函数参数
用指向指针函数作函数参数
9 1