一、函数
函数和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);
}