/* * File: main.cpp * Author: Vicky * */#include <iostream>#include <cstdarg>/** 建立函數類型,可以用於建立函數數組 */typedef void (*FUNC_t)(int id, int args_size, ...);void pcreate(int id, int args_size, ...) { std::cout << "create" << std::endl;}void pread(int id, int args_size, ...) { std::cout << "read" << std::endl;}void pupdate(int id, int args_size, ...) { std::cout << "update" << std::endl;}void pdelete(int id, int args_size, ...) { std::cout << "delete" << std::endl;}/** 可以限制某類相同函數的操作類型,用於函數流程式控制制 */FUNC_t funcs[] = { &pcreate, &pread, &pupdate, &pdelete,};void args(int args_size/** 可變參數長度 */, ... /** 可變參數*/) { va_list argp; va_start(argp, args_size); for (int i = 0; i < args_size; i++) { char* arg = va_arg(argp, char*); std::cout << arg; } std::cout << std::endl; va_end(argp);}/* * */int main(void) { args(2, "Hello ", "World!"); void (*function_args)(int, ...) = &args; function_args(3, "Fuck ", "FFFKKK ", "尼瑪"); std::cout << "---------------------------" << std::endl; int funcs_size = sizeof (funcs) / 4; for (int i = 0; i < funcs_size; i++) { funcs[i](10001, 0); // 調用函數 } std::cout << "---------------------------" << std::endl; printf("funcs[0] = %d\tpcreate = %d\n", funcs[0], pcreate); std::cout << "通過函數指標地址值(int)轉換為函數並調用" << std::endl; int p_adr = int(funcs[0]); std::cout << "p_adr = " << p_adr << std::endl; FUNC_t f = FUNC_t(p_adr); f(2001,0); return 0;}
Hello World!
Fuck FFFKKK 尼瑪
---------------------------
create
read
update
delete
---------------------------
funcs[0] = 134514602 pcreate = 134514602
通過函數指標地址值(int)轉換為函數並調用
p_adr = 134514602
create