1. 程式人生 > 其它 >【C語言學習筆記】指標函式與函式指標

【C語言學習筆記】指標函式與函式指標

C語言中的函式和指標的概念是非常重要的概念,然後又讓人覺得非常困難。

本文來簡單聊一聊指標函式與函式指標的區別。

其實這兩個概念很好區分,顧名思義,類似於指標陣列與陣列指標,指標陣列是一個數組,它的每一個元素都是一個指標,因此名為指標陣列。陣列指標呢本身是一個指標,只不過這個指標指向的是一個數組。這樣理解起來是不是就很好記了。

同樣的,指標函式是一個函式,它的返回值是一個指標型變數,我們通常稱這種函式為指標函式。
函式指標本身是一個指標,它指向的是一個函式,當它們的型別相同時就可以用指標來指向並使用,好比我們想用一個指標指向一個int型變數,那就必須宣告為指向int型別的指標。

#include <string.h>

// 交換兩個整型變數的值
void swap(int *a, int *b);

// 返回兩個字串中較長的一個
char *func(char *str1, char *str2);

int main(const int argc, char *argv[])
{
	void (*p)(int *a, int *b); //指向函式的指標
	p = swap; // p是一個指標變數,它所指向的內容是一個函式

	int a = 1;
	int b = 2;
	p(&a, &b);

	char *str1 = "hello";
	char *str2 = "world";
	char * l_str = NULL; // l_str是一個指向字串的指標
	// longer_str是一個返回較長字串的函式
	// 因為它的返回值是指標,所以該函式為一個指標(型)函式
	l_str = longer_str(str1, str2);

	return 0;
}

// 交換兩個整型變數的值
void swap(int *a, int *b)
{
	if (a==b || *a==*b || a==NULL || b==NULL)
		return ;
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

// 返回兩個字串中較長的一個
char *longer_str(char *str1, char *str2)
{
	// strlen函式功能是求取字串長度,不包含末尾的'\0'
	if(strlen(str1) >= strlen(str2)) {
		return str1;
	} else {
		return str2;
	}
}