前言:
今天来用直白的话讲一讲主函数参数是个啥
上课的时候 总是见老师mian主函数里面有两个不知道是什么东西的参数 感觉很好奇 因为平时自己都是写成无参数的 而且网上大部分的C语言教程都不会提到这个东西
int main()
{
return 0;
}
但是老师的那种却是这样的
# include <stdio.h>
int main(int argc,char**argv)
{
return 0;
}
这两个参数是什么玩意???
第一个 argc 是 argument count的缩写 意思是参数数量
第二个 argv 是argument value的缩写 意思是参数值
可是这样一说 那不是更懵逼了?别急 让我们先认识一下他们两个参数是干啥子的
我们先讲讲计算机命令行是啥东西 同时点击win+r键 就会出现一个运行框框
然后输入cmd 就会弹出一个黑框框 这个就是命令行
我们输入ping.exe并回车
命令行会显示ping的各种用法和参数
ping这个可执行文件用于向目标主机发送一个网络请求
目标主机如果收到该请求将返回一个回应 通常用于测试网络是否正常(当然 你可以不用理解 只要知道ping是一个可以执行的程序就行)
我们输入ping baidu.com并回车
这些数字说明我们与目标主机baidu.com链接通畅(你不是校园网应该比我还快)
将这个有什么用?
我们想一想 不同的目标和主机名和选项 是如何传递到程序当中的呢?
如果回想一下我们学过的知识 那就是用scanf函数输入数据
我们要运行scanf函数 就必须先运行程序 等待程序执行到输入函数的时候才会输入数据
但是 我们用命令行的时候 还没有启动程序就先输入了数据 baidu.com
可见这种传入数据的方式原理和scanf完全不一样
这时 我们传入的参数直接被传递到主函数参数中 (终于点题了)
主函数参数定义
常用写法:
# include <stdio.h>
int main(int argc,char**argv)
{
return 0;
}
参数名可以自定义,但是惯例我们是使用argc和argv 分别表示参数数量和参数值
比如我们输入 ping baidu.com
此时参数数量argc为2 分别为ping和baidu.com两个
char**argv指向char*数组的首元素
这里*argv->ping *(argv+1)->baidu.com或是argv[0]->ping argv[1]->baidu.com
实践
接下来我们自己写一个程序 尝试使用主函数参数
# include <stdio.h>
int main(int argc,char**argv)
{
printf("%d\n",argc);
for(int i = 0; i < argc; i++){
printf("%s\n", argv[i]);
}
return 0;
}
先编译程序 保存程序名为ceshi
编译成功后 编译器下方会显示文件所在目录
我们打开命令行 输入ceshi.exe运行程序
欸~神奇地发现 居然没办法运行 这是因为ceshi.exe这个程序不在系统的可执行文件搜索目录当中
我们得输入完整路径(或相对路径) 比如我这里就是C:\Users\20848\Documents\ceshi.exe
输入了如下内容 第一行表示参数个数1,第二行表示字符串参数 为刚才输入的绝对路径
我们再多加几个字符串参数试试看
我们可以看到输出如下:参数个数为4 字符串依次为绝对路径 i ,am,chuizi
总结:上面那么多都是在讲主函数参数的使用方法 实际上大多数人用win系统都不会用到命令行 编程比赛的时候就更不会了 不过主函数参数在以后学习linux系统中将会大放异彩 我们目前只要能知道两个参数的意义就可以应对考试了
练习题
27 . 单选题 简单 4分
关于主函数的形式参数,下列说法正确的是( )。
A.
是在程序编译时获得实际值
B.
不可以由用户自己定义名字
C.
类型可以是实型
D.
可以有两个
选D
解析
main函数的参数argv[argc]是一个空指针。如果argc大于1,则argv[0]是一个指向程序名的字符串指针,argv[1]~argv[argc-1]是指向命令行参数的字符串指针。
刚才我也运行了一遍 如果参数个数为1 那么argv指向的就是一个程序名字(路径)字符串
28 . 单选题 中等 4分
不合法的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[])
选C 不用多解释了 注意char *argc[]==char **argc