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