c语言main函数特点 简述c语言中main函数的作用

main函数有什么特点呢?main函数C中的main函数编辑C继承了C语言的大部分特性,因此保留了“程序总是从main函数开始执行,且总是默认从main函数的return语句或结尾处结束运行”这一传统 , 但是要注意 , C中的main函数要想作为程序执行的出入口 , 必须写在全局(Global)范围,不能写成某个结构体或某个类的成员
初学编程,C语言中的main函数考虑到main函数的特殊性 , lz不明白这个问题可以理解 。
main()是省略了返回值类型,C语言会默认认为成main的类型为int , 在main()的函数体内要返回一个值,如return 0;
而void main()的返回值是void类型,也就是说没有返回值 。这样在main()的函数体内你就不用写return 0;或者return 1;之类的返回语句 。
在一个程序中 , 可以说你看不出两者的差别,因为main()是C语言的入口点,入口点如果返回了程序也就结束了,因此C语言的这个特性似乎没用 。可没用的话,C语言的设计者为什么要这么做呢?!肯定有用 。
没错,前面我说的是在一个程序中 , 它似乎没用 。可如果一个程序prog2调用另一个程序prog1的话(这里指的是prog2直接调用prog1编译好的可执行文件),那么这个特性就有用了 。因为prog2要知道prog1运行之后的状态 。比如你用C写了一个删除文件的程序(暂且命名为delf) , 然后用另一个程序去调用delf,那么调用结果怎么样?。空飧鑫募欠裆镜袅耍空馐莍nt main()就会派上用场了 。C语言中默认的main如果返回为0,那么这个程序调用就成功了,其他值 , 则为不同的错误代码 。在你的delf程序中,如果那个文件删除成功,那么就在int main()中返回0,其他调用delf的程序就知道,噢,这个操作成功了 。
在unix/linux系统中的很多命令都是通过这种方式获得运行结果的 。
关于谭浩强的书 , 我想不用多说,发行量说明了一切 。毕竟第二版在编写的时候还比较早,而第三版根据很多现在的需要进行了改写,内容当然会好些 。鉴于lz是初学C , 其实大可不必在这个问题上浪费太多时间,当你有了更多的项目经验,对这个问题会有更深刻的理解 。
上面我已经给出了main()、int main()和void main()的区别,但建议lz忽略这个差别,认为成二者一样,先把C的其他部分学好 。至于只写成main(),我并不推荐 , 就算编译器通过了,这种编程的风格也太不严谨 , 不利于好的习惯的养成 。
简述main方法是什么,什么特点,怎么用,何时用[编辑本段]main函数概述
日常生活中 , 要完成一件复杂的功能,我们总是习惯把“大功能”分解为多个“小功能”以实现 。在C程序的世界里,“功能”可称呼为“函数”,因此“函数”其实就是一段实现了某种功能的代码,并且可以供其它代码调用 。
一个程序,无论复杂或简单,总体上都是一个“函数”;这个函数就称为“main 函数”,也就是“主函数” 。比如有个“做菜”程序,那么“做菜”这个过程就是“主函数” 。在主函数中,根据情况,你可能还需要调用“买菜 , 切菜,炒菜”等子函数 。
[编辑本段]main函数的参数
C程序最大的特点就是所有的程序都是用函数来装配的 。main()称之为主函数,是所有程
序运行的入口 。其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用
的是有参函数,则参数在调用时传递 。
main()
【c语言main函数特点 简述c语言中main函数的作用】{
y1=f1(x1,x2);
}
f1(int a,int b)
{
.
Y2=f2(x3,x4);
.
}
f2(int m,int n)
{
.
..
}
在前面课程的学习中,对main()函数始终作为主调函数处理,也就是说,允许main()调用
其它函数并传递参数 。事实上,main()函数既可以是无参函数 , 也可以是有参的函数 。对于有
参的形式来说,就需要向其传递参数 。但是其它任何函数均不能调用main()函数 。当然也同样
无法向main()函数传递,只能由程序之外传递而来 。这个具体的问题怎样解决呢?
我们先看一下main()函数的带参的形式:
main(argc,argv)
int argc,char *argv[];
{
..
}
从函数参数的形式上看,包含一个整型和一个指针数组 。当一个C的源程序经过编译、链接后 , 会生成扩展名为.EXE的可执行文件,这是可以在操作系统下直接运行的文件,换句话说 , 就是由系统来启动运行的 。对main()函数既然不能由其它函数调用和传递参数,就只能由
系统在启动运行时传递参数了 。
在操作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数 。其格式为:
命令参数1参数2.参数niquest;
此格式也称为命令行 。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main()函数的参数 。
命令行与main()函数的参数存在如下的关系:
设命令行为:program str1 str2 str3 str4 str5
其中program为文件名,也就是一个由program.c经编译、链接后生成的可执行文件program.exe , 其后各跟5个参数 。对main()函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为char*argv[6],指针数组的取值情况如图6-15所示 。
数组的各指针分别指向一个字符串 。应当引起注意的是接收到的指针数组的各指针是从命令行的开始接收的 , 首先接收到的是命令,其后
才是参数 。
下面用实例来说明带参数的main()函数的正确使用 。
[例6-29] 利用图形库函数绘制一个变化的环 。它是把一个半径为R 1的圆周分成n份,然
后以每个等分点为圆心 , 以R s为半径画n个圆(关于作图的详细理论本教材第9章第1节作了专
门介绍,这里只作简单分析) 。利用m a i n ( )函数的带参数形式,我们可以从键盘以命令行的方
式输入R 1和R s及屏幕的背景色 。
#include graphics.h /*包含图形库函数的头文件* /
#include math.h
#define pi 4.
m a i n ( a r g c , a r g v )
int argc;char *argv[]; /* 定义带参数的m a i n ( ) * /
{
int x,y,r1,rs,color;
double a;
int gdriver=DETECT,gmode;
initgraph(gdriver,gmode,"..\\bgi ")启;/动*图形工作方式*/
r1=atoi(argv[1]);/*计算基础圆半径*/
rs=atoi(argv[2]);/*计算同心圆半径*/
color=atoi(argv[3]);/*背景色*/
cleardevice();/*清除图形屏幕*/
setbkcolor(color);/*设置背景色*/
setcolor(4);/*设置图形显示颜色*/
for(a=0;a=2*pi;a =pi/18)/*绘制同心圆*/
{
x=r1*cos(a) 320;
y=r1*sin(a) 240;
circle(x,y,rs);/*以圆心坐标为x、y,半径为rs画圆*/
}
getch();/*等待按键继续*/
close graph();/*关闭图形工作方式*/
}
若程序名为L6-29.c,经编译、连结生成可执行文件L6-29.exe 。在操作系统的环境下运行
程序,命令行方式为:
l6-29 40 20 3
则命令行与main()函数的参数有如图6-16所示的关系
图6-16中,argv[0]是程序名,argv[1]是r1的值,
argv[2]是rs的值 , argv[3]是屏幕的背景色 。
由于指针数组均存放字符串,所需的圆半径及背景
色彩通过atoi()函数转换为整型 。
通过带参数的main()函数,我们可以为自己的程序设置口令,在运行程序的命令行中给出所需的口令,正确则继续,否则退出 。程序图形输出如图6-17所示 。
[例6-30]将上述程序作修改,在程序的入口处添置密码 , 若给定密码正确 , 则显示图
形 。
#includegraphics.h
#include math.h
#define pi 4.
m a i n ( a r g c , a r g v )
int argc;char *argv[];
{
int x,y,r1,rs,color;
double a;
int gdriver=DETECT,gmode;
if (strcmp(argv[1],"pass")!=0) 设/置* 口令的比较*/
{ printf("password error!\n");
e x i t ( 0 ) ;
}
initgraph(gdriver,gmode,"..\\bgi ");
r1=atoi(argv[2]);
rs=atoi(argv[3]);
color=atoi(argv[4]);
cleardevice();
setbkcolor(color);
setcolor(4);
for(a=0;a=2*pi;a =pi/18)
{
x=r1*cos(a) 320;
y=r1*sin(a) 240;
circle(x,y,rs);
}
getch();
closegraph();
}
在操作系统的环境下运行程序 , 命令行中增加口令“p a s s”,命令行方式为:
l6-30 pass 20 40 3
指针数组的存储字符串如图6-18所示 。
若给定字符串argv[1]的值是pass,则程序正确运行,否则程序退出 。口令正确的情况下,显示的图形为图6-17中的一个 。
[编辑本段]函数的分类
1、从用户使用的角度看 , 函数有两种:
(1)、标准函数,即库函数 。这是由系统提供的 。
(2)、用户自定义的函数 。可以解决用户的专门需要 。
2、从函数的形势看,函数分两类:
(1)无参函数 。printstar和print_message就是无参函数 。在调用无参函数时,主调函数并不将数据传送给被调用函数 , 一般用来执行指定的一组操作 。
(2)有参函数 。在调用函数时 , 在主调函数和被调用函数之间有数据传递 。也就是说 , 主调函数可以将数据传递给被调用函数使用 , 被调用函数中的数据也可以带回来供主调函数使用 。
[编辑本段]函数定义的一般形式
1、无参函数的定义形式
类型标示符 函数名()
{声明部分
语句
}
2、有参函数定义的一般形式
类型标示符 函数名 (形式参数列表)
{声明部分
语句
}
3、可以有“空函数”
它的形式为
类型说明符 函数名()
{ }
例如:
dummy(){}
4、对形参的声明的传统方式
在老版本c语言中,对形参类型的声明是放在函数定义的第二行,也就是不再第一行的括号内指定形参的类型,而在括号外单独指定 , 例如上面定义的max函数可以写成一下形式:
int max (x,y)/*指定形参x,y*/
int x,y;/*对形参指定类型*/
{int z;
z=xy?x:y;
return(z);
}
关于c语言main函数特点和简述c语言中main函数的作用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读