C++main函数中的形式参数

C程序最大的特点就是所有的程序都是用函数来装配的。main()称之为主函数,是所有程

序运行的入口。其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用的是有参函数,则参数在调用时传递。

C/C++语言中的main函数,经常带有参数argc,argv,如下:

int main(int argc, char** argv)

int main(int argc, char* argv[])从函数参数的形式上看,包含一个整型和一个指针数组。当一个C/C++的源程序经过编译、链接后,会生成扩展名为.EXE的可执行文件,这是可以在操作系统下直接运行的文件,换句话说,就是由系统来启动运行的。对main()函数既然不能由其它函数调用和传递参数,就只能由系统在启动运行时传递参数了。在操作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数。其格式为:

命令参数1参数2....参数n¿

此格式也称为命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main()函数的参数。

命令行与main()函数的参数存在如下的关系:

设命令行为:program str1 str2 str3 str4 str5

其中program为文件名,也就是一个由program.c经编译、链接后生成的可执行文件program.exe,其后各跟5个参数。对main()函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为char*argv[6],指针数组的取值情况如图6-15所示。

 

 

\

数组的各指针分别指向一个字符串。应当引起注意的是接收到的指针数组的各指针是从命令行的开始接收的,首先接收到的是命令,其后

才是参数。

下面的程序演示argc和argv的使用:

[cpp] 

#include<iostream>   

using namespace std;  

int main(int argc,char **argv){  

  for(int i=0;i<argc;i++)  

        cout<<"Argument "<<i<<" is "<<argv[i]<<endl;  

    return EXIT_SUCCESS;  

}  

该程序编译运行成功,产生了 test.exe 文件,在打开DOS窗口,用cd命令进入到 test.exe 文件夹下 ,在DOS下输入如下命令:

test.exe hello! this is a test! 

则运行的结果如下:

 

\

 数组指针是指向数组地址的指针,其本质为指针

指针数组是数组元素为指针的数组(例如int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。

数组指针与指针数组在某些使用情况下很相似,要注意区分

 

 

main函数中两个参数的用法总结

原创 2016年03月27日 10:18:42

1、定义 
C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为: 
int main (int argc,char *argv[]){…}或者 
int main (int argc,char **argv){…} 
其中第一个表示参数的个数;第二个参数中argv[0]为自身运行目录路径和程序名,argv[1]指向第一个参数、argv[2]指向第二个参数…… 
完整程序如下:

#include<iostream>
#include<string>

using namespace std;

int main(int argc, char **argv) 
{
    string str;
    for(int i=0;i!=argc;++i)
    {
        cout<<"arg["<<i<<"]"<<argv[i]<<endl;
    }

    system("pause");
    return 0;
}

2、如何执行 
由于main函数不能被其它函数调用, 因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传 送到main的形参中去,具体操作如下: 
首先在C++中完成编译之后,然后在dos命令窗口下切换到.exe执行文件所在的文件夹(dos下如何切换目录见DOS中切换盘符及目录),再在该路径下输入带参数的命令:XXX.exe a b c …即可得到输出。

3、练习题 
不合法的main函数命令行参数表示形式是 
(A) main(int a,char *c[]) (B) main(int arc,char **arv) 
(C) main(int argc,char *argv) (D) main(int argv,char *argc[])

分析:main的第2个参数应该为一个字符数组指针,B的第二个参数是一个指向字符的指针的指针,也就是一个字符串数组; 
C的第二个参数是一个指向字符的指针,也就是一个字符串. 
char **argv或者char *argv[]是个二维数组,也可以理解为一个存放字符指针的数组—字符指针数组。每个元素存放一个字符指针,而字符指针又是可以指向一个字符串的,这n个字符串分别由argv[0]~~~argv[n]来指向. 
这个就是指针数组,不是别的,特别不是二维数组。 
综述,答案为C。

 

Linux C语言:main函数的命令行传参

在大学里面,老师一般会这样教,定义main 函数应该是这样的:

Linux C 语言:main 函数的命令行传参

甚至是这样的:

Linux C 语言:main 函数的命令行传参

但是其实在 Linux 下,一个正确的main 函数应该被定义为如下:

Linux C 语言:main 函数的命令行传参

大家可以看到,main 函数中有两个参数,分别是 argc 和 argv。但是在 C 语言中规定,main 函数是不能被别的函数调用的,那究竟是谁传递了参数给main 函数呢?

答案是:命令行

当我们在命令执行程序时,其实就是在给main 函数传递参数,其中 argc 的全称是 argument count,即命令行的参数的数目。 argv 的全称是 argument value,即命令行的参数对应的值。

我们先来研究一下这个 argc 吧,注意,这个 argc 指的不是额外的参数,而是包含执行文件在内的参数个数。举个例子吧,假设有程序如下:

Linux C 语言:main 函数的命令行传参

执行程序结果:

Linux C 语言:main 函数的命令行传参

命令行的参数是以空格分开,大家可以看到,argc 就是参数个数,包含执行的文件在内。

那么再来看看这个 argv,类型是 char *[],如果有一定 C 语言功底的同学应该知道,这个是一个字符指针数组,通俗一点来讲,就是一个数组名字叫 argv,并且数组中放着很多个字符串:

Linux C 语言:main 函数的命令行传参

那么究竟是谁放在里面呢?没错,就是命令参数的值,以上面的实例为例子

gec@ubuntu:~$ ./example one two three 代表当前有 4 个参数,那么 argv 的数组中就应该是这样的:

那么数组访问每个成员,我们在大学里面已经学习过了,使用下标就可以访问:argv[0]为数组第一个成员,argv[1]为数组第二个成员,如此类推。

那么接下来写个程序验证一下:

Linux C 语言:main 函数的命令行传参

执行的结果:

Linux C 语言:main 函数的命令行传参

 

 

  • 17
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值