主函数参数以及char argv[][]、char * argv[]和char ** argv的区别

主函数参数以及char argv[][]、char * argv[]和char ** argv的区别

我们一般在使用main函数时,不使用它的参数(main()或main(void)),但其实,main函数有参数而且参数有很大的作用。

主函数的参数:

int main(int argc,char *argv,char *envp)

主函数实际上有三个参数:
argc:表示有命令行参数个数,第一个为可执行行程序名,argc最少为1。
argv:参数名。
envp:系统的环境变量,很少使用,下文不使用该参数。
tip:主函数带参数,第一个参数必须是int型,用来接收形参个数,第二个参数必须是字符指针数组,用来接收从操作系统命令行传来的一个字符串的地址。
主函数参数来源:
主函数的参数其实是程序的“命令行参数”,argc(argument count)是参数个数,argv(argument vector)是参数向量,是一个char *类型指针数组,数组中的每一个元素(其值为指针)指向命令行中的一个字符串的首字符。
主函数由操作系统调用,其参数也由操作系统传递,在DOS,UNIX和LINUX操作系统的命令行中包括了命令名和传递给主函数的参数。
命令行的一般格式:
命令名 参数1 参数2 ··· 参数n

//我们用程序来看一下操作系统命令行给主函数传参
#include <stdio.h>

int main(int argc,char * argv[])
{
	int i;
        printf("we have %d argument\n",argc);
        for(i=0; i<argc; i++)
        {
                printf("NO.%d argument is %s\n",i+1,argv[i]);
        }
        return 0;
	return 0;
}

在linux下跑的结果:
在这里插入图片描述
main函数的第二个参数的不同写法:
int main(int argc,char * argv[])≈int main(int argc,char **argv)

详解

1、char argv[][]

二维数组,长得跟我们上面的参数差不多,但实际上完全不是一回事。
在C语言中,数组名是数组首元素的地址,所以数组名的作用相当于一个指针。

#include <stdio.h>

int main()
{
    int array[5][5] = {0};
    int * p = array;
    printf("p:%p\n",p);
    printf("array:%p\n",array);
    return 0;
}
***********************
结果:
p:0060FE98
array:0060FE98

所以,char argv[5][5]可以理解为char (*p)[5][5],p为指向5x5个元素的二维数组的指针变量

2、char * argv[]

指针数组,其元素是指向字符型数据的指针元素。
我们可以将它拆开理解,(char *)(argv[]),argv[]这个数组是char *类型的,其元素是指向字符型数据的指针。
区别另一个变量的定义:char ( * p)[],p指向字符型的一维数组的指针变量,在C语言里,数组名在编译时作为指针使用,原理上数组名可被认为是一个指针(不是变量,数组名是固定指向第一个元素)

3、char **argv

char **argv是一个二重指针。
char **argv≈char * argv[]
第2条中已说明,数组名可当做指针来使用,原理上char **argv和char *argv[]都是通过“二级间址”的方式来访问字符串变量。

我们可以画个图来理解。

在这里插入图片描述
所以,我们一般认为char * argv[]和char ** argv的定义时一样的,其区别就在于前者可以用下标来访问其元素,后者需要用到指针的运算。

  • 17
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值