`

C语言中的main函数参数及返回值

阅读更多

我们经常看到main函数不带参数。因此main后都是空括号。

main()
{
...
}

实际上,main函数必须带参数,这个参数可以认为是main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为:

main (argc,argv)

C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数应写为:

main (argc,argv) 
int argv; char *argv[]; 
{
...
}

 或写成:

main (int argc,char *argv[])   
{
...
}

由于main函数不能被其它函数调用,因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。DOS提示符下命令行的一般形式为:

C:\>可执行文件名 参数 参数……

但是应该特别注意的是,main的两个形参和命令行中的参数在位置上不是一一对应的。因为,main的形参只有二个,而命令行中的参数个数原则上未加限制。

argc参数表示了命令行中参数的个数(注意:文件名本身也算一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。例如有命令行为:

C:\>program alpha beta gamma,由于文件名program本身也算一个参数,所以共有4个参数,因此argc取得的值为4。argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。指针数组的长度即为参数个数。数组元素初值由系统自动赋予。

main(int argc,char *argv[]){
  while(argc-->1) printf("%s\n",*++argv); 
} 

本例是显示命令行中输入的参数。如果上例的可执行文件名为program.exe,存放在A驱动器的盘内。因此输入的命令行为:

C:\>a:program alpha beta gamma则运行结果为:

alpha 

beta 

gamma

该行共有4个参数,执行main时,argc的初值即为4。argv的4个元素分为4个字符串的首地址。执行while语句,每循环一次argv值减1,当argv等于1时停止循环,共循环三次,因此共可输出三个参数。在printf函数中,由于打印项*++argv是先加1再打印,故第一次打印的是argv[1]所指的字符串alpha。第二、 三次循环分别打印后二个字符串。而参数program是文件名,不必输出

操作系统在调用main函数时是传参数的,main函数的标准原型应该是:

int main(int argc, char *argv[])

当然,我们也可以做一点小小的改动。例如:char *argv[] 可以写成 char **argv;

int main(int argc, char **argv)

main 函数的返回值类型必须是int,这样返回值才能传递给程序的激活者(如操作系统)。
我们先看一下main()函数的带参的形式:

main(argc,argv)
int argc,char *argv[];
{
.....
}

其中,argc是命令行参数的个数;argv指向一个指针数组的首元素,数组中每个元素都是char *指针,指向整个命令行参数字符串。
  
C标准也允许int main(void) 这种写法,如果不使用系统传进来的两个参数也可以写成这种形式。
除了以上两种形式之外,定义main函数的其它写法都是错误的或不可移植的。

分享到:
评论

相关推荐

    C语言main函数的参数及其返回值详细解析

    main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。下面我们在winxp环境下做一个小实验。首先编译下面的程序:int main( ...

    C语言 用指针作为函数返回值详解

    C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数。下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个: #include #include char *strlong(char *str1, char *str2){...

    关于C语言中main()函数详解

    关于C语言中main()函数详解,包括返回值,参数和一些需要注意的事项

    C语言之Main函数返回值问题分析

    C语言之Main函数返回值问题分析: 很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The ...

    C语言指针函数和函数指针.rtf

    当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。 格式: 类型说明符 * 函数名(参数) 当然了,由于返回的是一个地址,所以类型说明符一般都是int。 ...

    C语言中计算正弦的相关函数总结

    C语言sin()函数:正弦函数 头文件:  #include <math.h> sin() 函数用来求给定值的正弦值,其原型为: double sin(double x); 【参数】给定的值(弧度)。 【返回值】返回-1 至1 之间的计算结果。 弧度...

    C语言程序设计标准教程

     函数作表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如: z=max(x,y)是一个赋值表达式,把max的返回值赋予变量z。'Next of Page 2.函数语句  函数调用的一般...

    详解C语言中的函数、数组与指针

    1、函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念;  函数是...

    详解C语言中index()函数和rindex()函数的用法

    函数说明:index()用来找出参数s 字符串中第一个出现的参数c 地址,然后将该字符出现的地址返回。字符串结束字符(NULL)也视为字符串一部分。 返回值:如果找到指定的字符则返回该字符所在地址,否则返回0. 范例 #...

    C语言和C++的重要知识点提炼.rar

    (3)C语言程序是从main函数开始的。函数的返回值如果缺省则为int,而不是void。 (4)函数必须用return来返回。即使void类型也不建议省略。 (5)使用函数时须包含相应的头文件。自定义的头文件用双引号,C语言...

    详解C语言函数返回值解析

    详解C语言函数返回值解析 程序一: int main() { int *p; int i; int*fun(void); p=fun(); for(i=0;i<3;i++) { printf(%d\n,*p); p++; } return 0; }; int* fun(void) { static int str[]={1,2,3,4...

    C语言随堂笔记.zip

    //2、每一个c语言有且只有一个主函数main(),c++中main函数返回为int /*TC2.0中返回可以为void(空) 3、语法规则:第一条语句结束使用";"结束,(并不是一行结束) */ //定义一个函数,求两数中最大值 /* 定义...

    10.第十章 函数.txt

    (3)main函数是程序执行的入口,main函数可以调用其他函数,其他函数调用结束后要返回main函数,main函数执行完毕,整个程序就结束了。 (4)main函数可以出现在任何位置,其他函数的位置也不是强制的,每个函数...

    简单比较C语言中的execl()函数与execlp()函数

    C语言execl()函数:执行文件函数 头文件: #include 定义函数: ...返回值:如果执行成功则函数不会返回, 执行失败则直接返回-1, 失败原因存于errno 中. 范例 #include main() { execl("/bi

    c语言难点分析整理,C语言

    7. C中可变参数函数实现 38 8. C程序内存中组成部分 41 9. C编程拾粹 42 10. C语言中实现数组的动态增长 44 11. C语言中的位运算 46 12. 浮点数的存储格式: 50 13. 位域 58 14. C语言函数二维数组传递方法 64 15. ...

    详解C语言中telldir()函数和seekdir()函数的用法

    C语言telldir()函数:取得目录流的读取位置 头文件: #include 定义函数: off_t telldir(DIR *dir); 函数说明:telldir()返回参数dir 目录流目前的读取位置. 此返回值代表距离目录文件开头的偏移量返回值返回...

    Linux 下C语言原理生动学习 -- Hello World的秘密

    04.秘密二:main函数的返回值 (1-3) 05.秘密三:被隐藏的细节 (1-4) 06.秘密四:printf不见了(1-4) 07.秘密五:链接了哪些共享库 (1-3) 08.秘密六:调用共享库中的函数 (1-4) 09.秘密七:函数的解析过程 (1-2) 10....

    深入学习C语言中的函数指针和左右法则

    通常的函数调用  一个通常的函数调用的例子: //自行包含头文件 ... 这个MyFun函数是一个无返回值的函数,它并不完成什么事情。这种调用函数的格式你应该是很熟悉的吧!看主函数中调用MyFun函数的书写

    详解C语言中的ttyname()函数和isatty()函数的用法

    C语言ttyname()函数:返回一终端机名称 头文件: #include 定义函数: char * ttyname(int desc); 函数说明:如果参数desc 所代表的文件描述词为一终端机, 则会将此终端机名称由一字符串指针返回, 否则返回NULL...

Global site tag (gtag.js) - Google Analytics