【教材】*2022/11/29[指针] 指针数组作main函数的形参

本文介绍了main函数如何接收和处理命令行参数,详细解析了`int main(int argc, char* argv[])`中argc和argv的含义。通过示例程序展示了如何遍历和输出这些参数,以及如何利用这些参数实现简单的参数回送功能。
摘要由CSDN通过智能技术生成

指针数组的一个重要应用是作为main函数的形参。在以往的程序中, main函数的第1行一般写成以下形式:
int main()

int main(void)
括号中是空的或有“void",表示main 函数没有参数,调用main函数时不必给出实参。这是一般程序常采用的形式。实际上,在某些情况下, main函数可以有参数,即:

int main(int argc, char * argv[])

 其中, argcargv就是 main函数的形参,它们是程序的“命令行参数”。argc(argument count,意思是参数个数).argv(argumen vector 缩写,意思是参数向量),它是一个* char指针数组,数组中每一个元素(其值为指针)指向命令行中的一个字符串的首字符。

 注意:如果用带参数的main函数,其第1个形参必须是int型,用来接收形参个数,第2个形参必须是字符指针数组,用来接收从操作系统命令行传来的字符串中首字符的地址。

通常main函数和其他函数组成一个文件模块,有一个文件名。对这个文件进行编译和连接,得到可执行文件(后缀为. exe)。用户执行这个可执行文件,操作系统就调用main函数,然后由main函数调用其他函数,从而完成程序的功能。
 

什么情况下main函数需要参数? main函数的形参是从哪里传递给它们的呢?显然形参的值不可能在程序中得到。main函数是操作系统调用的,实参只能由操作系统给出。在操作命令状态下,实参是和执行文件的命令一起给出的。例如在 DOS, UNIX 或Linux等系统的操作命令状态下,在命令行中包括了命令名和需要传给main函数的参数。

命令行的一般形式为
命令名参数1 参数2…参数n

命令名和各参数之间用空格分隔。命令名是可执行文件名(此文件包含main函数),假设可执行文件名为filel.exe,今想将两个字符串"China" ,"Beijing"作为传送给main 函数的参数。命令行可以写成以下形式:

file1 China Beijing
file1为可执行文件名,China和 Beijing是调用main函数时的实参。实际上,文件名应包括
盘符﹑路径,今为简化起见,用filel来代表。

请注意以上参数与main函数中形参的关系。main函数中形参argc是指命令行中参数的个数(注意,文件名也作为一个参数。例如,本例中“file1”也算一个参数)﹐现在,argc的值等于3(有3个命令行参数:file1,China,Beijing)。 main 函数的第2个形参argv是一个指向字符串的指针数组,也就是说,带参数的main函数原型是:

int main( int argc,char * argv[]);
 命令行参数必须都是字符串,这些字符串的首地址构成一个指针数组.
指针数组argv中的元素argv[0]指向字符串"filel"的首字符(或者说argv[0]的值是字符串"file1"的首地址), argv[1]指向字符串"China"的首字符,argv[2]指向字符串"Beijing"的首字符。


如果有一个名为file1的文件,它包含以下的main函数:

int main(int argc,char * argv[])
{
while(argc>1)
    {
++argv;
printf("%s\n",* argv);
--argc;
    }
return 0;
}


在Visual C++环境下对程序编译和连接后,选择“工程”→“设置”→“调试”→“程序变
量”命令,输入"China Beijing" ,再运行程序,将会输出以下信息:

China

Beijing

上面main函数可以改写为:

int main(int argc,char * argv[])
{ 
while( argc-->1)
printf("%s\n",* ++argv);
}

其中,“*++argv”是先进行++argv的运算,使argv指向下一个元素,然后进行*的运算,找到argv当前指向的字符串,输出该字符串。在开始时, argv指向字符串"file1",++argv使之指向"China" ,所以第1次输出的是"China",第2次输出"Beijing"。

echo命令
它的作用是实现“参数回送”,即将echo后面的各参数(各字符串)在同一行上输出。实现“参数回送”的C程序(文件名为echo.c)如下:

#include <stdio.h>
int main(int argc,char * argv[ ])
{while(--argc>0)
printf("%s%c",*++argv,(argc>1)?':'\n');
return 0;
}

当argc>1时,在输出的两个字符串间输出一个空格,当argc=1时输出1个换行.

为了便于理解,也可以写成以下形式:

#include<stdio.h>
int main(int argc,char * argv[])
{int i;
for(i= l;i<argc;i++)
printf("%s%c".argv[i],(i<argc—1)?'': '\n');
return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值