C语言 函数,指针函数,函数指针

一、函数

函数和java的方法是一个概念。
定义一个函数:

int func() {
	printf("hello world");
	return -1;
}

c中函数支持重载,

int func(int* x, int* y) {
	printf("hello world");
	return -1;
}

c是从上到下依次执行,所以函数定义的位置,必须在调用之前,类似Html中Dom解析。除非通过在外部.h文件中申明函数,在通过#include "xx.h"方式导入。
外部.h文件申明的函数中,只有函数申明,没有函数体,不参与编译,类似java接口。其目的是为了解决程序的耦合问题。如下:

#pragma once
int func(void);
int func(void* pathName, int a);

注意:

  • 自己头文件,通过#include "fuc.h"引入
  • 系统头文件,通过#include <xx.h>

二、指针函数

指针函数,其本质是一个函数,返回值是某一类型的返回值的指针。
指针函数格式:返回值类型标识符* 函数名(参数列表)。如下:

int* func(int x, int y);

指针函数案例:

// 函数申明
int* func(void* param)
{
	printf("指针函数\n");
	int a = 10;
	int* p = &a;
	return p;
}
// 调用
int main()
{
	int a = 10;
	func(&a);
}

void无符号类型,类比于object
&a:表示拿到a的地址。是个取址符


三、函数指针:

函数指针,起本质是一个指针变量,该变量指向函数。
函数指针格式: 返回值类类型标识符 (*指针变量)(参数列表);

// 函数指针格式: 返回值类类型标识符 (*指针变量)(参数列表);
int (*func_var)();
int test() {
	printf("函数指针,其本质是一个变量\n");
	return -1;
}

int main()
{
	//将test首地址赋值给 指针变量 func_var ,不存在函数调用
	func_var = test;
	// 调用该函数
	func_var();
}

3.1 函数指针案例:对main函数中的成员变量进行修改

C是比较强大的面向过程的语言,指针几乎是无所不能。在C中,函数很强大,可以基于地址更改成员变量。Java中则不行。
案例:通过指针(函数指针),修改main函数中的成员变量a的值

void (*func)(int* a, int* b);
void point_func(int* a, int* b)
{
	printf("函数指针\n");
	*a = 200;
}

int main()
{
	int a = 10;
	int b = 20;
	func = point_func;

	func(&a, &b);
	printf("a值 %d", a);
}
发布了7 篇原创文章 · 获赞 0 · 访问量 139

猜你喜欢

转载自blog.csdn.net/weixin_35937808/article/details/102908858