C中main函数解析

本文介绍了C语言中main函数的六种不同写法及其在不同标准下的编译情况,强调了不推荐使用void main()。详细解析了main函数参数的意义,包括argc和argv的用途,并通过实例展示了如何处理命令行参数。还提到了atoi函数将字符串转换为整数的用法及限制。
摘要由CSDN通过智能技术生成

参考链接

main函数不同写法

以下为main函数的6种不同写法:

main(){}         //NO.1
void main(){}    //NO.2
int main(){}     //NO.3
int main(void){}        //NO.4
int main(int argc,char *argv[]){}   //NO.5
int main(int argc,char **argv){}    //NO.6
  • NO.1在C90标准下可以正常编译,而在C99和C11标准下会抛出一个警告(不写返回值,默认的返回值为int,也就相当于NO.1和NO.3等价)
  • NO.2-6在C90、C99、C11标准下均能正常编译
  • NO.4、5、6才是main函数的规范写法(NO.5等价于NO.6)

从1972年C语言被设计出来到C90标准发布这段时间,对C语言不同的实现就导致了对main函数的差异性。强烈不推荐写法2,因为main函数是被操作系统调用的,操作系统会根据main函数的返回值来判断程序的正确执行与否,如果返回void,那代表的是什么状态呢?而且一些编译器支持这种写法,一些编译器不支持,所有的标准并未认可这种写法。

main参数解析

参数1:int argc 用于存放命令行参数的个数
参数2:char *argv[] 是个字符串的数组,每个元素都是一个字符指针,指向一个字符串 //首先从 argv 处开始,先与[]结合,因为其优先级比高,所以 argv 是一个数组,然后再与 * 结合,说明数组里的元素是指针类型,然后再与 char 结合,说明指针所指向的内容的类型是字符型的
参数2:char **argv //首先从 argv 开始,先与 * 结合,因此 argv 是一个指针,然后再与 * 结合,说明指针所指向的元素是指针,然后再与 char 结合,说明该指针所指向的元素是整型数据.

  • argv[0] 代表程序名
  • argv[1]argv[argc-1]代表程序参数 ​
  • 参数的命名 argcargv 是程序员的约定,你也可以用 argd 或 args,但是不建议这么做

例1:传入参数 aaa bbb ccc ddd

#include<iostream>

int main(int argc,char **argv)
{
	//显示参数的个数
	printf("argc is %d \n",argc); 
    
    //列出全部参数
	for(int i=0;i<argc;i++){
		printf("argv[%d] is %s \n",i,argv[i]); 
	}
	
}

结果:
j结果
例2:传入参数0

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

int main(int argc,char **argv)
{
	
	
	if(argc!=2)
	{
		printf("请输入0~2选择一个职业 \n");
		printf("模式0::牧师 \n");
		printf("模式1::战士 \n");
		printf("模式2::术士 \n");
		return -1; 
	}
	
	int mode=atoi(argv[1]);
	
	switch(mode)
	{
		case 0:
			printf("你选择了牧师 \n");
			break; 
		case 1:
			printf("你选择了战士 \n");
			break;
		case 2:
			printf("你选择了术士 \n");
			break;
		default:
			printf("你没有选择职业 \n");
	}
	
	string s="2147483648";
	printf("s=%d \n",atoi(s.c_str()));
	
}

程序结果

atoi函数

atoi、stoi、strtol 说明

  • string字符串转换为int类型,只能转换为十进制;
  • atoi函数不会对string字符串进行范围检查[-2147483648,2147483647],超过这个界限,不会报错,只会进行相应的转换,遇到非法字符会停止(遇到非数字时会停止),不会报错;
  • 头文件为 #include<cstdlib>
  • atoi(string.c_str())string 转换为 char* 后才能传入作为atoi函数的参数
int  atoi( const char *str );
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值