【C语言】main函数的参数解析

main函数

每个C程序都必须有一个main函数,main函数又称为主函数,是执行程序的起点,它被称之为函数,是否会像平时使用函数时需要自己的参数呢?
答案是肯定的,那么他都有那些参数呢?

main函数的在vs2017环境下调试,可以看到main函数里的三个参数

#include <stdio.h>
int main()
{
	return 0;
}


可以看到,main函数里面有三个参数

_argc
_argv
_get_initial_narrow_environment(维护环境变量)

main函数在被调用的时候,这三个参数也传向main,只是没有被main函数接到,也没用。那么在调用main函数时,在main函数里面写相对应的参数,main函数就可以接到这些值。

参数详解

为了详细了解main函数的参数,写出以下代码:

#include <stdio.h>
int main(int _argc,char *_argv[],char *_get_initial_narrow_environment[])
{
	int i = 0;
	for (i = 0; i < _argc; i++)
	{
		printf("%s\n",_argv[i]);
	}
	return 0;
}

程序输出如下图所示:

这是可执行程序的名字。
鼠标右击工程的名字main->属性->配置属性->调试->命令行参数,修改命令行参数并且应用如下:

再来执行程序,输出如下图所示:

注意到工程的命令行参数可以通过**_argv这个数组获取到,命令行参数的个数可以由_argc**获取到。

注:_argv数组的最后一个元素存放了一个NULL的指针。
代码改了如下:

int main(int _argc, char *_argv[], char *_get_initial_narrow_environment[])
{
	int i = 0;
	while (_argv[i] != NULL)
	{
		printf("%s\n", _argv[i]);
			i++;
	}
	return 0;
}

输出结果如下:

验证得出_argv数组的最后一个元素存放了一个NULL的指针。

了解了前面连个参数,最后一个参数是什么呢?
写出一下代码:

int main(int _argc, char *_argv[], char *_get_initial_narrow_environment[])
{
	int i = 0;
	while (_get_initial_narrow_environment[i] != NULL)
	{
		printf("%s\n", _get_initial_narrow_environment[i]);
			i++;
	}
	return 0;
}

输出结果如下:

结果显示都是环境变量(内容太多,截取部分)。
注:_get_initial_narrow_environment数组的最后一个元素存放了一个NULL的指针。

1. _argc

_argc是个整型变量,表示命令行参数的个数(含第一个参数)。

2._argv

_argv是个字符指针的数组,每个原元素都是一个字符指针,指向一个字符串。这些字符串就是命令行中的每一个参数(字符串)。

3._get_initial_narrow_environment

_get_initial_narrow_environment是字符指针的数组,数组的每一个原元素是一个指向一个环境变量(字符串)的字符指针。
####4.举个例子

#include <stdio.h>
#include <stdlib.h>
int  Add(int a, int b)
{
	return a + b;
}
int  Sub(int a, int b)
{
	return a - b;
}
int  Mul(int a, int b)
{
	return a * b;
}
int  Div(int a, int b)
{
	return a / b;
}

int main(int _argc,char *_argv[],char *_get_initial_narrow_environment[])
{
	int ret = 0;
	if (_argc != 4)
	{
		printf("参数有误\n");
	}
	switch (*(_argv[1] + 1))
	{
	case 'a':
		ret = Add(atoi(_argv[2]), atoi(_argv[3]));
		break;
	case 's':
		ret = Sub(atoi(_argv[2]), atoi(_argv[3]));
		break;
	case 'm':
		ret = Mul(atoi(_argv[2]), atoi(_argv[3]));
		break;
	case 'd':
		ret = Div(atoi(_argv[2]), atoi(_argv[3]));
		break;
	default:
		printf("参数有误:%s", _argv[1]);
		break;
	}
	printf("ret=%d\n", ret);
	return 0;
}

命令行参数改为:

执行结果:

总结

_argc,_argv描述命令行参数息,_get_initial_narrow_environment描述环境变量

如有不足之处,欢迎指正!!

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值