C++ 之 main函数的调用与被调用
2015-09-03 22:08
302 查看
main函数能调用自身吗?
其他函数能调用main函数么?
下面先看一段有意思的程序,一个简洁有趣的打印菱形的程序。
[cpp] view
plaincopy
int line = 1;
int main()
{
printf("%*s\n",7-(line>4?line-4:4-line),
"*******"+2*(line>4?line-4:4-line));
if(++line !=8)
main();
return 0;
}
效果图如下:
首先说一下”%*s”的用法,即*是用一个int参数来代替,比如:
printf(“%*s\n”, 5, “def”);就相当于printf(“%5s\n”, “def”);指定了字符串输出的宽度。这个用法平时见得不多,可以了解下。
另外:有人对这一行“*******”+2*(line>4? line-4:4-line)感到疑惑,其实认真看一下,就是一个字符串指针加上一个int整数,也就是指针的平移了。比如line=1第一行时,2*(line>4? line-4:4-line)即为6,也就是7个星号的字符串指针平移6个,所以输出一个星号了。最后这个程序用到了main函数的递归调用,注意一定要写上退出条件,否则就无限循环了。
这里分享下*在scanf中的作用是跳过...
例如:scanf("%*d %*d %d",&n);
printf("%d",n);
这样当输入 1 2 3的时候,只会存储n,正常打印3
再啰嗦一下*在printf("%*d",width,n);这样因为是*d 的顺序,所以width实际表达的是 n的输出宽度,n才是要输出的内容。
例如:int n=3;
scanf("%d",width);
printf("%*d",width,n);
下面看一下其他函数调用main的例子,打印(空格):
[cpp] view
plaincopy
int line = 1;
int func();
int main()
{
printf("%d ",line);
line++;
if(line<=9)
main();
func();
return 0;
};
int func()
{
if(line<=13)
{
line++;
main();
}
return 0;
}
运行结果如下:
事实证明main函数只是一个程序的入口,也相当于一个普通的函数,也能被自身调用,也能被其他函数调用。
这和一般的函数之间互相调用的概念是一样的。不过需要注意的是,main函数不管是自身的调用还是被其他函数调用,都要设置函数终止的条件,这个递归函数有点相似,不然就会陷入死循环。
其他函数能调用main函数么?
下面先看一段有意思的程序,一个简洁有趣的打印菱形的程序。
[cpp] view
plaincopy
int line = 1;
int main()
{
printf("%*s\n",7-(line>4?line-4:4-line),
"*******"+2*(line>4?line-4:4-line));
if(++line !=8)
main();
return 0;
}
效果图如下:
首先说一下”%*s”的用法,即*是用一个int参数来代替,比如:
printf(“%*s\n”, 5, “def”);就相当于printf(“%5s\n”, “def”);指定了字符串输出的宽度。这个用法平时见得不多,可以了解下。
另外:有人对这一行“*******”+2*(line>4? line-4:4-line)感到疑惑,其实认真看一下,就是一个字符串指针加上一个int整数,也就是指针的平移了。比如line=1第一行时,2*(line>4? line-4:4-line)即为6,也就是7个星号的字符串指针平移6个,所以输出一个星号了。最后这个程序用到了main函数的递归调用,注意一定要写上退出条件,否则就无限循环了。
这里分享下*在scanf中的作用是跳过...
例如:scanf("%*d %*d %d",&n);
printf("%d",n);
这样当输入 1 2 3的时候,只会存储n,正常打印3
再啰嗦一下*在printf("%*d",width,n);这样因为是*d 的顺序,所以width实际表达的是 n的输出宽度,n才是要输出的内容。
例如:int n=3;
scanf("%d",width);
printf("%*d",width,n);
下面看一下其他函数调用main的例子,打印(空格):
[cpp] view
plaincopy
int line = 1;
int func();
int main()
{
printf("%d ",line);
line++;
if(line<=9)
main();
func();
return 0;
};
int func()
{
if(line<=13)
{
line++;
main();
}
return 0;
}
运行结果如下:
事实证明main函数只是一个程序的入口,也相当于一个普通的函数,也能被自身调用,也能被其他函数调用。
这和一般的函数之间互相调用的概念是一样的。不过需要注意的是,main函数不管是自身的调用还是被其他函数调用,都要设置函数终止的条件,这个递归函数有点相似,不然就会陷入死循环。
相关文章推荐
- C语言中volatile关键字的作用
- c/c++面试题
- 全面整理的C++面试题(转载)
- C++基础---重载函数
- c++primer之类(构造函数再探)
- C语言采用文本方式和二进制方式打开文件的区别分析
- 【C++模版之旅】神奇的Traits
- C++中vector用法
- C++标准库bind函数
- C语言hash函数
- C++模板类编写需要注意的一点
- C++基础---递归函数
- gcc编译器默认支持的c语言标准
- C++基础---内联函数
- C++模板元编程 - 3 逻辑结构,递归,一点列表的零碎,一点SFINAE
- 如何写memset函数
- C++基础---主函数
- C++基础---string类的replace
- 零基础学C语言 笔记十 指针
- 字符串C++整理