该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助.

一.main()函数参数
通常我们在写主函数时都是void main()或int main() {..return 0;},但ANSI-C(美国国家标准协会,C的第一个标准ANSI发布)在C89/C99中main()函数主要形式为:
(1).int main(void)
(2).int main(int argc,char *argv[]) = int main(int argc,char **argv).

其参数argc和argv用于运行时,把命令行参数传入主程序.其中ARG是指arguments,即参数.具体含义如下:
(参照
Arguments to main和C++ Primer7.2.6节)
(1).int argc:英文名为arguments count(参数计数)
count of cmd line args,运行程序传送给main函数的命令行参数总个数,包括可执行程序名,其中当argc=1时表示只有一个程序名称,此时存储在argv[0]中.
(2).char **argv:英文名为arguments value/vector(参数值)
pointer to table of cmd line args,字符串数组,用来存放指向字符串参数的指针数组,每个元素指向一个参数,空格分隔参数,其长度为argc.数组下标从0开始,argv[argc]=NULL.
argv[0] 指向程序运行时的全路径名
argv[1] 指向程序在DOS命令中执行程序名后的第一个字符串
argv[2] 指向执行程序名后的第二个字符串
argv[argc] 为NULL.

二.源代码中的argc与argv
由于C程序必须有main()函数为入口,而且它不能被其他函数调用(可以调用自身),因此不能再程序内部取得实际值.那么在何处把实参赋值给main函数的形参呢?这就需要调用"运行"或"DOS提示符",
在调用可执行程序exe时,编译器会帮助我们将输入参数的信息放入main函数的参数列表中传参.
1.计算命令行参数个数程序如下:

<strong>//C 输出参数个数
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{printf("参数个数=%d\n",argc);system("PAUSE");return 0;
}//C++ 输出参数个数
#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{cout<<"参数个数="<<argc<<endl;system("PAUSE");return 0;
}</strong>

调用"运行"(快捷键Ctrl+R)或"cmd"输入"G:\test.exe"会输出"参数个数=1",此时存储的就是执行程序名.输入"G:\test.exe 2 hello good"输出"参数个数=4":

2.查看argv[]二维数组存储具体字符串的代码如下:

<strong>//C 查看argv存储参数值及对应序号
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{int i;printf("参数个数=%d\n",argc);for(i=0; i<argc; i++){printf("参数序号=%d ",i);printf("参数值=%s\n",argv[i]);}system("PAUSE");return 0;
}//C++ 查看argv存储参数值及对应序号
#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{cout<<"参数个数="<<argc<<endl;for(int i=0; i<argc; i++){cout<<"参数序号="<<i<<" ";cout<<"参数值="<<argv[i]<<endl;     }system("PAUSE");return 0;
}</strong>

"运行"中输入"G:\test.exe 2 hello good",则输出入下图所示:

其中argv[0]指向字符串可执行程序的名称G盘下的test.exe,通常会位于"项目名称\Debut\xxx.exe"中.后面argv[1..3]单元依次指向程序调用时的参数.

三.调用argc和argv
在"运行"中输入"notepad.exe"回车能执行记事本程序(位于C:\Windows\System32),如果输入"notepad.exe test.txt"可以打开test.txt文本文件,其中test.txt位于当前路径下.如下图所示:

为什么我要讲述这个例子呢?主要是说明参数与exe之间的关系,main()函数其实与之也类似.同时在使用文件知识时,我们通常会涉及到main函数的argc和argv参数.如在《C++ Primer》这本书中第10.3.9实现单词转换的例子就涉及到该运用,这里只讲述涉及到该参数的部分代码供大家参考,大家可以自己去学习了解:

#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{//参数个数=3:工程名\读取txt文件\写入txt文件if(argc!=3)throw runtime_error("wrong number of arguments");//打开转换文件,argv[1]为读取的要转换txt文件名 open_file自定义打开函数if(!open_file(map_file,argv[1]))throw runtime_error("no transformation file");//打开要转换的写入txt文件if(!open_file(input,argv[2]))throw runtime_error("no input file");return 0;
}

其中具体操作是通过map(键-值对的集合)对象来实现,推荐大家看看这本最经典的C++书籍.
最后希望该文章对大家有所帮助,请不要小看这简单的基础知识,如果有错误或不足之处,还请海涵.
(By:Eastmount 2014-3-5 夜2点 原创:
http://blog.csdn.net/eastmount)

[C/C++基础知识] main函数的参数argc和argv相关推荐

  1. C++ main函数中参数argc和argv

    argc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0 ...

  2. c语言中argc的作用,C语言中main函数的参数argc和argv

    参考资料: C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* arg ...

  3. C++ main函数中参数argc和argv相关定义与研究

    最近在研究opencv代码,在读取图上时遇到了一些问题.因此把它总结一下,方便学习. argc 则是 argument count的缩写,表示传入main函数的参数个数: argv 则是 argume ...

  4. C++ main函数中参数argc和argv含义及用法( argument count和 argument vector)

    rgc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写(注意:不是argument value的缩写,自己以前理解错了), ...

  5. 【C/C++】main函数之参数argc和argv含义及用法

    初识argc和argv,对其用法甚是困惑,偶得大神"-牧野-"之总结,犹如醍醐灌顶,故转载分享如下,供更多博友学习. argc 是 argument count的缩写,表示传入ma ...

  6. (转)C++ main函数中参数argc和argv含义及用法

    原博地址:https://blog.csdn.net/dcrmg/article/details/51987413 argc 是 argument count的缩写,表示传入main函数的参数个数: ...

  7. main函数的参数argc和argv

    一.main()函数参数 通常我们在写主函数时都是void main()或int main() {..return 0;},但ANSI-C(美国国家标准协会,C的第一个标准ANSI发布)在C89/C9 ...

  8. Main函数中参数argc,argv说明

    C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) 这两个参数的作用是什么呢?argc 是指命令行输入参数的个数,a ...

  9. c语言main函数的参数argc,argv说明

    main函数参数argc,argv说明 C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int ...

最新文章

  1. 用Latex做介绍自己和团队科研的网页
  2. NowCoder小定律
  3. Array Elimination 运算,gcd,思维
  4. 17.IDA-基本块的定义
  5. 机器学习优化算法(一)
  6. arduino蓝牙通讯代码_蓝牙4.0模块 无线数据传输模块 无线蓝牙串口 Arduino
  7. 在线MSN代码(如同QQ在线咨询那种的)
  8. R语言第九讲 验证集法
  9. Nginx图片防盗链、缓存和压缩的示例
  10. 区块链100讲:Vitalik Buterin-以太坊Casper惩罚条件的最小化
  11. Web实践小项目(仅供参考)
  12. 麻省理工计算机相关网络课程,麻省理工MIT计算机课程表
  13. QCC频率校准工具定频
  14. x86架构PC机系统总线概述
  15. MyBatisPlus中的TypeHandler
  16. 卧槽!全网最全编程学习网站汇总!还不赶快放到收藏夹里吃灰~
  17. Android低版本程序升级方法,安卓版本太低又无法升级,部分软件运行不了?
  18. 70-0001 Poisson Matting【泊松抠图】
  19. html5游戏 美术,cocos2d-html5游戏学习之绘画小熊
  20. 如何快速入门成为一名数据分析师

热门文章

  1. 索引unusable|disable|enable
  2. goldengate 故障及解决方法汇总
  3. Eclipse新建web项目出现The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path
  4. Jmeter5.1.1第一个http请求的压力测试
  5. angularjs的一点总结
  6. Django-MySQL数据库使用01
  7. WINIO64位模拟键鼠操作
  8. Lec6-待学习的堆排序
  9. javascript王者归来--属性和方法的类型
  10. CodeProject 工具收藏