我認爲如果我爲函數指針創建了一個typedef,那麼使用函數指針會更容易,但我似乎讓自己絆倒了某些語法或用法或有關typedef的某些內容函數指針,我可以使用一些幫助。如何爲函數指針創建typedef
我有
int foo(int i){ return i + 1;}
typedef <???> g;
int hvar;
hvar = g(3)
這基本上就是我試圖完成我是一個相當新的C程序員,這是扔我太多。什麼取代<???>
?
我認爲如果我爲函數指針創建了一個typedef,那麼使用函數指針會更容易,但我似乎讓自己絆倒了某些語法或用法或有關typedef的某些內容函數指針,我可以使用一些幫助。如何爲函數指針創建typedef
我有
int foo(int i){ return i + 1;}
typedef <???> g;
int hvar;
hvar = g(3)
這基本上就是我試圖完成我是一個相當新的C程序員,這是扔我太多。什麼取代<???>
?
你的問題不太清楚,但我想你可能想是這樣的:
int foo(int i){ return i + 1;}
typedef int (*g)(int); // Declare typedef
g func = &foo; // Define function-pointer variable, and initialise
int hvar = func(3); // Call function through pointer
'typedef'函數的類型也是可能的,這有點不常見,但可以更清楚地說明:'typedef int g(int); g foo; g * func = &foo;'。這對於聲明(不幸的是,不定義)具有相同簽名的多個函數很有用。 –
@JonPurdy建議將該帖子發佈爲答案 –
編寫函數返回函數指針的原始方式是
int (* call(void)) (int,int);
這裏call
是函數,它只需要返回一個帶2個參數並返回一個整數值的函數指針。注意括號,它們是絕對必要的。
下面是代碼:
#include<stdio.h>
int sum(int a,int b) //sum is the function returned by call
{
return a+b;
}
int (*call(void)) (int ,int);
int main() {
int (*p)(int,int); // way to declare a function pointer
p=call();
printf("%d\n",(*p)(8,3));
}
int(*call(void))(int,int) {
return sum;
}
這與此問題有何關係? – morty
你是對的。函數指針可方便地用於指向相同返回類型的不同函數,並且採用相同數量的參數。 參數類型應該匹配函數指針參數的聲明。
你的情況,你可以定義你的函數指針g
爲:
typedef int (*g)(int);
// typedef
函數指針。
g
是函數返回值int
和取一個int
參數的函數指針。
#include<stdio.h>
typedef int (*pointer_to_function)(int first_parameter_of_type_int, int second_parameter_of_type_int);
int my_function_returning_int_and_taking_two_int_arguments(int par1, int par2)
{
int result = par1 + par2;
return result;
}
int my_mul_function(int par1, int par2)
{
int result = par1 * par2;
return result;
}
int main()
{
int res; // returning result will be here
pointer_to_function my_fun_pointer; // declare function pointer variable;
my_fun_pointer = my_function_returning_int_and_taking_two_int_arguments; // function pointer points to `my_function_returning_int_and_taking_two_int_arguments` function
res = my_fun_pointer(2,3); // Call function through pointer
printf(" result of `my_function_returning_int_and_taking_two_int_arguments` = %d \n", res);
my_fun_pointer = my_mul_function; // now function pointer points to another function: `my_mul_function`
res = my_fun_pointer(2,3); // Call function through pointer
printf(" result of `my_mul_function` = %d \n", res);
return 0;
}
OUTPUT:
result of `my_function_returning_int_and_taking_two_int_arguments` = 5
result of `my_mul_function` = 6
您的代碼不可能工作,因爲如果g是一個typedef,你可以」
函數指針的使用可以通過下面的簡單程序來說明把它稱爲一個函數。你能描述一下你想要做什麼嗎? – templatetypedef
真的嗎?我以爲我的老闆曾告訴我使用typedef來完成這項工作。你能否用#Define完成類似的處理? – SetSlapShot
你想要做什麼?目前還不清楚你想要做什麼。 – templatetypedef