main函数的参数

来源:互联网 发布:如何修改淘宝客佣金 编辑:程序博客网 时间:2024/05/21 17:21

       在之前的学习中很少注意到main函数的参数问题,因为在平时写函数的时候都是写一个main()这样就结束了,根本没有往里面写参数。然而没有写并不代表没有参数。我们来看看msdn里面对mian函数的描述

从这里面我们可以看出来其实main函数是包括三个参数的  也就是 argc    *argv[]   *envp[]。

    argc :  命令行参数个数

    *argv[] :  命令参数

    *envp :  环境变量

    我们先来说说 argc和*argv[]的关系。

    argc是一个int型变量,*vrgv[]是一个指针数组(*envp[]也是一个指针数组)argc和*argv[]具有如下关系。


    argc代表的是*argv[]中char*的个数。而每一个char*都指向一个不同的字符串首地址。

    我们来用一段代码解释这个图:

#define _CRT_SECURE_NO_DEPRECATE 1#include<stdio.h>#include<stdlib.h>int main(int argc, char* argv[], char* envp[]){int i = 0;for(i=0; i<argc; i++){printf("%s\n",argv[i]);}        system("pause");        return 0;}
我们来看看运行结果:


   因为此时我们没有添加参数,所以是只打印了这个函数在电脑中存放的位置。这次我们添加上 参数  aa bb cc 。


  我们再来看看运行结果:


  我们把这次的运行结果和之前的argc和argv的 关系图一一对应起来。

  

接下来我们写一个函数来写一个加法计算进一步使用mian参数 :首先改写命令参数如下


#define _CRT_SECURE_NO_DEPRECATE 1#include<stdio.h>#include<stdlib.h>#include<string.h>int main(int argc, char *argv[], char *envp[]){int ret=0;if(strcmp(argv[1],"sum") == 0)ret=atoi(argv[2])+atoi(argv[3]);printf("%d",ret);        system("pause");        return 0;}
我们来看运行结果:


最后说说*envp[]:  

 envp用的不多,因此对它的作用并没有argc和argv那样清楚的理解。不过依据它的表现,笔者能够想到的到envp的作用有两点:
(1)为程序提供参考:程序的运行过程中需要参考环境变量作出决定,比如安装程序必须知道系统默认的ProgramFiles,它可以通过envp查看到本系统的程序文件夹在ProgramFiles=C:\Program Files,于是默认安装目录就设置定为C:\ProogramFiles;
(2)如果程序在运行过程中对环境变量做了修改,在它退出时想要恢复,这时就可以参照envp中的数据将环境变量恢复到程序执行前的设置。


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 肚子大屁股大腿粗怎么办 甲状腺偏大弥漫性欠均匀怎么办 大腿后侧拉伤了怎么办 腰和臀部都疼怎么办 瑜伽后弯后腰疼怎么办? 吃了大蒜肝痛怎么办 练瑜伽前躯不行怎么办 月子里碰冷水了怎么办 月子手碰凉水了怎么办 月子里碰了冷水怎么办 顺产后下面会痛怎么办 产后肚子瘦不下来怎么办 出月子后臀部很疼怎么办 做月子时臀部疼怎么办 月子臀部大腿疼困怎么办 产后抱孩子腰疼怎么办 剖腹产后5年小肚子很大怎么办 压力大工作忙瘦了怎么办? 哺乳乳房一大一小怎么办 哺乳期乳房一大一小怎么办 上班之后奶少了怎么办 出了月子还流恶露怎么办? 剖腹产2年刀疤痒怎么办 刨宫产6天伤口痒怎么办 脸的皮肤油油的怎么办 狗狗子宫蓄脓怎么办 刮宫后子宫壁薄怎么办 产妇有痔疮怎么办很疼 二胎着床在剖腹产切口怎么办 刨腹产3月后怀孕怎么办 破腹产两年了肚子还是很大怎么办 抛妇产后肚子大怎么办 破腹产后想大便怎么办 破腹产后肚子硬怎么办 在月子里同房了怎么办 胃变大凸出来了怎么办 坐完月子脊背疼怎么办 月子过后脊背疼该怎么办 怀孕的时候牙疼怎么办 练瑜伽后弯腰疼怎么办 练完瑜伽腰椎疼怎么办