最近作了一部分硬件的工做,從新對C語言的一部分知識進行了學習,發現了以前作算法
不太注意的部分,補充在這裏。算法
函數指針是指向函數的指針變量。也就是說這個變量裏面存的值是函數的地址,在調用
的時候能夠經過變量名來調用。函數
經過此方式來聲明,調用:學習
<!--more-->指針
int max(int x, int y) { return x > y ? x : y; } main() { int b; int (*p)(int, int) = & max; b = p(1, 2); }
此處的p就是max函數,能夠想象爲max函數的一個別名rest
當咱們知道函數指針的時候,就能夠考慮回調函數了。
大部分語言均可以進行函數傳遞,對應在C語言,這種操做都是利用函數指針來作的。
回調函數f,就是指在調用某個函數的過程當中,把f做爲一個參數給執行的函數,在當前
執行的函數中可能從新調用f,通常這個時候f就是回調函數。code
一個樣例:token
void callme(void) { puts("I'm being calling...") } void wait(void (*callme)(void)) { // do something... callme(); } main() { wait(callme); }
Struct的樣式,可是是幾個數據使用同一個內存空間。
這個東西頗有意思,是否很多動態語言都是從這個獲取的思路?內存
用來限制某個變量所佔用的空間大小,width表明多少位,能夠在對內存限制以及字節
對齊的時候多加考慮。字符串
字符串常量化運算符 #回調函數
把一個宏參數轉換爲字符串常量
#include <stdio.h> #define test(a, b) \ printf(#a ", " #b ", are interesting!") int main(void) { test(Clang, Cpp); return 0; }
標記粘貼運算符 ##
#include <stdio.h> #define tokenpaster(n) printf ("token" #n " = %d", token##n) int main(void) { int token34 = 40; tokenpaster(34); return 0; }
C語言沒有try/catch這些操做,通常函數的處理結果會經過返回值肯定。