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

简介: /* ============================================================================ 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;
}

相关文章
|
29天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
51 4
|
2月前
|
存储 C语言 C++
如何通过指针作为函数参数来实现函数的返回多个值
在C语言中,可以通过将指针作为函数参数来实现函数返回多个值。调用函数时,传递变量的地址,函数内部通过修改指针所指向的内存来改变原变量的值,从而实现多值返回。
|
2月前
|
存储 搜索推荐 C语言
如何理解指针作为函数参数的输入和输出特性
指针作为函数参数时,可以实现输入和输出的双重功能。通过指针传递变量的地址,函数可以修改外部变量的值,实现输出;同时,指针本身也可以作为输入,传递初始值或状态。这种方式提高了函数的灵活性和效率。
|
2月前
利用指针函数
【10月更文挑战第2天】利用指针函数。
20 1
|
2月前
|
算法 搜索推荐 C语言
【C语言篇】深入理解指针4(模拟实现qsort函数)
【C语言篇】深入理解指针4(模拟实现qsort函数)
26 2
|
2月前
魔法指针 之 函数指针 回调函数
魔法指针 之 函数指针 回调函数
21 0
|
2月前
|
存储
一篇文章了解区分指针数组,数组指针,函数指针,链表。
一篇文章了解区分指针数组,数组指针,函数指针,链表。
21 0
|
3月前
|
Linux
在Linux内核中根据函数指针输出函数名称
在Linux内核中根据函数指针输出函数名称
|
4月前
|
程序员 C语言
指针在函数参数和返回值中的使用
指针在函数参数和返回值中的使用
69 9
|
4月前
|
存储 搜索推荐 C语言
C语言中的指针函数:深入探索与应用
C语言中的指针函数:深入探索与应用