【C語言學習筆記】指標函式與函式指標
阿新 • • 發佈:2022-03-03
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; } }