如何在C中声明一个指向函数的指针,以使指针本身是易失性的.
static void volatile (* f_pointer)(void*);
static void (volatile * f_pointer)(void*);
static void (* volatile f_pointer)(void*);
为什么我问这个?我在http://wiki.answers.com/Q/Volatile_example_code_sample_coding_of_volatile_pointer上阅读了关于volatile指针的内容.
有时挥发性指针和指向volatile的问题:
现在,事实证明指向volatile变量的指针非常常见.这两个声明都声明foo是一个指向volatile变量的指针:
volatile int * foo; 
int volatile * foo; 
非易失性变量的易失性指针非常罕见(我想我曾经使用过它们),但我最好继续给你一个语法:
int * volatile foo;
所以,我希望获得一个易失性指针,而不是指向"volatile"函数的指针.
谢谢
Jer*_*fin 17
将星号视为"障碍".比星号更接近变量名的限定符(const或volatile)修改指针本身.限定符比变量名更远,而不是星号修改指针将引用的内容.因此,在这种情况下,您将拥有:
static void * volatile f_pointer(void *);
当然,除了你需要parens来定义一个函数指针而不是声明一个返回指针的函数:
static void (*volatile f_pointer)(void *);
static是存储类,而不是一个限定词,所以同样是没有真正的在其情况.您只能为变量本身指定存储类,而不是它指向的存储类.没有"指向extern int"或"指向static int"的指针,只有"指向int的指针".如果指定存储类(static或extern),它始终是第一位的.
其他线程已经讨论了线程之间的关系,volatile因此我不会在此重复,除非注意到这可能没有用.
Car*_*rum 10
cdecl 对于这类问题来说非常方便:
$ cdecl
Type `help' or `?' for help
cdecl> declare f_pointer as static volatile pointer to function(pointer to void) returning void
static void (* volatile f_pointer)(void *)
cdecl>
cdecl的来源:http://cdecl.org/files/cdecl-blocks-2.5.tar.gz