我無法理解下面的語法中最裏面的「int」是什麼意思。在這個表達式中int的含義
int(*(*ptr (int))(void)
我這種表達的理解說,ptr
是一個函數指針會變成沒有爲它的參數(從表達的空白部分),並返回一個int
(從開頭爲int
)。但ptr
之後的int
是什麼意思?
編輯:道歉,但在問題文件本身的問題是misprinted。這裏的表達
int (*ptr (int))(void)
我無法理解下面的語法中最裏面的「int」是什麼意思。在這個表達式中int的含義
int(*(*ptr (int))(void)
我這種表達的理解說,ptr
是一個函數指針會變成沒有爲它的參數(從表達的空白部分),並返回一個int
(從開頭爲int
)。但ptr
之後的int
是什麼意思?
編輯:道歉,但在問題文件本身的問題是misprinted。這裏的表達
int (*ptr (int))(void)
從C標準,該signal()
功能有相當複雜的簽名:
void (*signal(int sig, void (*func)(int)))(int);
的signal()
函數有兩個參數,一個int
和指向一個函數,它的int
參數並返回void
;它返回一個指向一個函數的指針,該函數採用int
參數,並返回void
- 與第二個參數類型相同。
這比你的代碼更復雜,但它可以減少你的例子,那就是:
int (*ptr(int))(void);
工作一步一步:
void (*signal(int sig, void (*func)(int)))(int);
void (*signal(int sig))(int); // Remove second argument
void (*signal(int))(int); // Remove argument name
int (*signal(int))(int); // Change return type
int (*ptr(int))(int); // Change name of function
int (*ptr(int))(void); // Remove argument of returned pointer to function
因此,在上下文中,這意味着您的語句是一個聲明ptr
是一個函數,它需要一個參數int
並返回一個指向不帶參數並返回int
值的函數的指針。該函數的實現(定義)將爲內部int
提供參數名稱。
示例代碼 - 與ptr
更名爲function
:
#include <stdio.h>
#include <stdlib.h>
static int counter(void) { static unsigned short val = 0; return ++val; }
static int (*function(int arg))(void)
{
switch (arg)
{
case 0:
return rand;
default:
return counter;
}
}
int main(void)
{
int (*func)(void);
func = function(0);
printf("F() = %5d\n", func());
printf("F() = %5d\n", func());
printf("F() = %5d\n", func());
func = function(1);
printf("F() = %5d\n", (*func)());
printf("F() = %5d\n", (*func)());
printf("F() = %5d\n", (*func)());
return 0;
}
輸出示例:
F() = 16807
F() = 282475249
F() = 1622650073
F() = 1
F() = 2
F() = 3
我假設我可以添加assert(sizeof(unsigned short) != sizeof(int));
。
你有一個'int',你應該有一個'void'。 – user2357112
@ user2357112:謝謝。 –
我寫了一個例子,但是你編輯了你的問題(在寬限期內,所以它不在編輯歷史中)並且改變了語法。你確定這次是否正確? 'ptr'不是這裏的指針,所以它可能仍然是錯誤的。 – user2357112
實際上,新版本中的圓括號甚至不匹配,所以肯定是錯誤的。 – user2357112
@ user2357112:我剛剛複製了表達式,它與問題論文中的方式完全相同。但是,是的,現在我發現這個問題有些問題。開合支架的數量不相等。你怎麼看呢? –