我们经常看到main函数不带参数。因此main后都是空括号。
C代码
main()
{
...
}
实际上,main函数必须带参数,这个参数可以认为是main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为:
C代码
main (argc,argv)
C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数应写为:
C代码
main (argc,argv)
int argv; char *argv[];
{
...
}
或写成:
Java代码
main (int argc,char *argv[])
{
...
}
由于main函数不能被其它函数调用,因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。DOS提示符下命令行的一般形式为:
C代码
C:\>可执行文件名 参数 参数……
但是应该特别注意的是,main的两个形参和命令行中的参数在位置上不是一一对应的。因为,main的形参只有二个,而命令行中的参数个数原则上未加限制。
argc参数表示了命令行中参数的个数(注意:文件名本身也算一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。例如有命令行为:
C:\>program alpha beta gamma,由于文件名program本身也算一个参数,所以共有4个参数,因此argc取得的值为4。argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。指针数组的长度即为参数个数。数组元素初值由系统自动赋予。
C代码
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函数的标准原型应该是:
C代码
int main(int argc, char *argv[])
当然,我们也可以做一点小小的改动。例如:char *argv[] 可以写成 char **argv;
C代码
int main(int argc, char **argv)
main 函数的返回值类型必须是int,这样返回值才能传递给程序的激活者(如操作系统)。
我们先看一下main()函数的带参的形式:
C代码
main(argc,argv)
int argc,char *argv[];
{
.....
}
其中,argc是命令行参数的个数;argv指向一个指针数组的首元素,数组中每个元素都是char *指针,指向整个命令行参数字符串。
C标准也允许int main(void) 这种写法,如果不使用系统传进来的两个参数也可以写成这种形式。
除了以上两种形式之外,定义main函数的其它写法都是错误的或不可移植的。
(原文地址:http://txlong-onz.iteye.com/blog/1343174)
分享到:
相关推荐
在C语言中,当我们声明一个函数并希望接受数组作为参数时,实际上传递的是数组的首元素地址,因为数组名在大多数情况下等价于指向其首元素的指针。有三种常见的方式声明这种函数: 1. 形式参数为指针:`void ...
main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。下面我们在winxp环境下做一个小实验。首先编译下面的程序:int main( ...
总结起来,在C语言中,参数传递方式和函数返回值是紧密相关的。参数值传递方式简单、安全,适用于不需要修改实参值的场景,但无法实现函数内部对实参的修改;而参数地址传递方式则可以实现实参值的修改,使得函数...
关于C语言中main()函数详解 一、main()函数的形式 在最新的C99标准中,main()函数只有两种定义方式是正确的: ...main()函数是C语言中最重要的函数,它的形式、返回值和参数都是我们需要了解和掌握的重要知识点。
C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数。下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个: #include #include char *strlong(char *str1, char *str2){...
在C语言中,函数指针是一种非常强大的特性,它允许程序员将函数当作参数传递给其他函数或在运行时决定调用哪个函数,这种灵活性对于实现某些高级算法(如排序算法中的比较函数)至关重要。下面将详细介绍函数指针的...
本文将深入探讨“C函数调用-不使用函数返回值”的概念,通过分析给定的代码示例,解释不同类型的函数参数传递方式,并讨论其潜在的影响和最佳实践。 ### 函数调用与参数传递 在给定的代码示例中,我们看到了多种...
下面我们将深入探讨嵌入式系统中的C语言编程基础,特别是关于函数返回值的相关知识点。 1. **函数定义与声明** 在C语言中,函数定义包含函数名、返回类型和参数列表。例如: ```c int add(int a, int b) { ...
C语言函数题库及答案 C语言函数是C语言中基本的构成单元,用于实现某种特定的功能。函数可以将一组语句封装起来,使得代码更加简洁和易于维护。 函数的定义和调用 在C语言中,函数的定义和调用是两个独立的概念。...
main函数中,我们首先输入两个整数x和n,然后调用fun函数计算x的n次方,并将结果输出。 知识点: * 定义函数的基本语法:return_type function_name(parameters) {function body} * 函数的参数传递:函数可以接受...
C语言中的幂函数和指数函数 C语言中提供了多种方法来计算幂函数和指数函数,这些方法可以帮助开发者快速并且准确地计算这些函数的值。在本文中,我们将介绍C语言中幂函数和指数函数的计算方法,包括pow()函数和sqrt...
"C语言函数大全"是一个资源,它为程序员提供了一个快速查找和理解C语言中常用函数的工具,特别是包含了图形函数和屏幕函数,这对于开发图形用户界面或处理屏幕输出的程序尤其有用。 一、C语言函数的基础 C语言中的...
main函数中调用GetDate函数,获取返回的地址值,并将其输出。 二、函数指针 函数指针是指向函数的指针,包含了函数的地址,可以通过它来调用函数。其声明格式为:类型说明符 (*函数名)(参数)。例如: ```c void ...
如果main函数没有参数,那么程序不能从命令行获取参数。 C语言函数的返回值是函数执行的结果,它可以是任何类型的值。函数的返回值类型是函数类型的一部分。函数的返回值可以是整数、浮点数、字符、数组等等。 在...
在C语言中,函数可以接受参数并返回值,它们有自己的作用域,允许局部变量的声明。下面我们将详细讨论题目中涉及的几个关键知识点: 1. **局部变量的存储类别**:在C语言中,未指定存储类别的局部变量默认的存储...
`return_type`是函数返回值的类型,如果函数不返回值,可以使用`void`。`function_name`是函数名,应遵循标识符的命名规则。`parameters`是函数参数列表,可以为空,也可以包含多个参数,每个参数有自己的类型和名称...
在C语言和C++编程中,`main`函数扮演着至关重要的角色,它是程序执行的起点。关于`main`函数的定义和返回值,存在一些常见的误解和规范,以下是详细的解释: 1. **C语言中的`main`函数**: - 在C89标准中,`main()...
在C语言中,指针是一种强大的工具,它可以存储变量的内存地址,从而使我们能够间接地访问和修改该变量。在本篇中,我们将探讨如何使用指针作为函数的返回值,以及这涉及到的一些重要概念和注意事项。 首先,C语言...
无参函数的定义中参数列表为空,如: ```c void func(){ printf("这是我的第一个函数!\n"); } ``` 在主函数`main()`中调用无参函数,如例4-1所示: ```c #include void func() { printf("这是我的第一个函数!\n...