3
我正在通过K & R的第7章张贴here中的问题的解决方案阅读。基本上,程序会根据程序的名称(“上”或“下”)将标准输入转换为小写或大写。这似乎转换函数的名称保存在某种字典,像这样:C中的枚举/字典式工具?
int (*convcase[2])(int) = {toupper, tolower};
,并在稍后访问取决于程序的名称是否开始与非盟或L以下功能:
if(argc > 0)
{
if(toupper((unsigned char)argv[0][0]) == 'U')
{
func = 0;
}
else
{
func = 1;
}
while((ch = getchar()) != EOF)
{
ch = (*convcase[func])((unsigned char)ch);
putchar(ch);
}
}
我明白那个代码块在做什么,但我从来没有见过像convcase的初始声明那样的东西。它好像是某种宏观,枚举和数组的奇怪组合。任何人都可以解释(1)为什么convcase是一个指针; (2)名字后面的(int)表示什么; (3)在声明中究竟是什么toupper和tolower,因为它们不是char * s;和(4)何时/为什么要使用这种设置。当你有多个可能的函数调用时,它只是一个类似宏的快速工具来节省一些空间吗?
http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work – 2013-03-10 17:49:52
http://cdecl.ridiculousfish.com/?q=int+%28 %2Aconvcase%5B2%5D%29%28int 29% – 2013-03-10 17:52:27