这是一个简单的代码
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
void (*func[2])(int);
void main(int n=1)
{
int i;
cout<<endl<<n;
func[0]=&exit;
func[1]=&main;
i=++n<=10;
(func[i])(n);
}
这里我对输出感到满意(即不同行中的1到10)。唯一困扰我的是为什么全局指针的类型为void(* ptr [2])(int)。如果可能的话,请用简单的词语解释为什么这个指针是如此具体的
答案 0 :(得分:3)
它不是指针,它是两个指针的数组。
这是一个功能:
void func(int);
这是一个指向函数的指针:
void (*func)(int);
这是一个包含两个函数指针的数组:
void (*func[2])(int);
如果func[i]
为零(exit
大于10),则i
指向n
,否则指向main
,i
{1}}是1。
请注意,您不能像这样递归地致电main
,也不允许main
除int main()
或int main(int, char**)
以外的任何签名。 (至少,在现代C ++中就是这种情况;这些规则可能不适用于编译器接受的史前方言)。