在学习C语言面试题时在某个网页上看到以下程序,我想知道我的分析是否正确?
#include<stdio.h>
#include<stdlib.h>
void main(int j)
{
printf("%d\n",j);
(&main + (&exit - &main)*(j/1000))(j+1);
}
我的分析是,最初主要的参数是参数计数,所以首先 1
将打印在屏幕上,接下来有一个对 main 的递归条件调用 (&main + (&exit - &main)*(j/1000))(j+1);
在此&exit
大于&main
,所以我们在这里获得一些值,它乘以 j/1000
表示直到 j
小于 1000
(&exit - &main)*(j/1000)
的值最终为零 main
函数被调用,因此数字来自 1,2,3,-----1000
将被打印。
一次j
变成1001
(&exit - &main)*(j/1000)
的值将变成(&exit - &main)*1
地址将为 (&main + &exit - &main)(j+1);
即exit
的地址函数使程序退出打印 1 to 1000
.
这是我对这个程序的分析,我想知道我对这个程序的分析是否正确。
最佳答案
该程序具有未定义的行为,因为附加 operator -
没有为函数指针定义。
此外,结果目标文件中的函数顺序未定义。
函数 main 的返回类型也应为 int。
关于c - 递归main函数分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803747/