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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章