2014年6月30日 星期一

C 指標 函式指標 函式指標陣列

下面是一些範例(在64位元的機器中,指標為 8 bytes):
char (*p)[20];
sizeof(p) = 8
sizeof(p[0]) = 20
sizeof(p[1]) = 20
sizeof(*p) = 20
p =  malloc(sizeof(*p));
strcpy(*p, "Kenneth Kuan");
*p = Kenneth Kuan

char *p1;
p1 = (char*) malloc(sizeof(char)*20);
sizeof(p1) = 8
sizeof(*p1) = 1
sizeof(p1[0]) = 1
sizeof(p1[1]) = 1

char p2[20];
sizeof(p2) = 20
sizeof(*p2) = 1

char *p3[20];
sizeof(p3) = 160
sizeof(*p3) = 8
sizeof(p3[0]) = 8


每個函式名稱都是指向該函式的指標,當你建立名為 go_to_warp_speed(int speed)的函式時,你同時也建立了稱作 go_to_wrap_speed的指標變數。

建立函式指標:
int (*warp_fn)(int);
warp_fn = go_to_warp_speed;
warp_fn(4);

warp_fn(4); 跟呼叫 go_to_warp_speed(4)一樣。
在建立函式指標時,記得要指定回傳值型別和接受的參數。


enum response_type {DUMP, SECOND_CHANCE, MARRIAGE);
typedef struct {
    char *name;
    enum response_type type;
}

建立函式指標陣列:
void (*replies[])(response) = {dump, second_chance, marriage};

replies[DUMP] == dump
replies[DUMP]等同於dump函式的名稱

沒有留言:

張貼留言