熟悉C语言的朋友们都知道mian()函数是普通C语言 程序的入口函数,有两种标准的原型:
int main();
int main(int argc,char *argv[]);
第一种原型简单且友好,能让初学编程的朋友快速入手。
今天我想谈谈它的第二个原型,它可以在程序运行时传入参数,还是挺有意思的。
给程序传入参数的一种简单的方法就是通过控制台运行,Windows下通过cmd(命令提示符),Linux下通过终端(terminal);
在第二个原型中,argc表示传递的字符串的数目,argv是一个指针数组,每一个指针指向一个字符串,也可以说是一份数据;来看一个具体的例子:
#include<stdio.h>
int main(int argc,char *argv[])
{
int m;
printf("程序接收的参数%d:\n",argc);
for(m=0;m<argc;m++)
{
printf("%s\n",argv[m]);
}
return 0;
}
从运行结果可以看出,包括程序名以及它后面的字符串都会被程序接收。
通过上面的讲解,大家基本上都了解了其高级用法的基础。其实它在Linux中的shell编程中有十分实际的应用,每一个shell命令需要一个程序来解释,当这个程序是由C语言编写的,那么main()函数就可以接收这个命令以及它后面的附加参数。
下面我们来看一个简单的实际的应用:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int isPrime(int n);
int main(int argc, char *argv[])
{
int i, n, result;
if(argc <= 1)
{
printf("Error: no input integer!\n");
exit(EXIT_SUCCESS);
}
for(i=1; i<argc; i++)
{
n = atoi(argv[i]);
result = isPrime(n);
if(result < 0)
{
printf("%3d is error.\n", n);
}
else if(result)
{
printf("%3d is prime number.\n", n);
}
else
{
printf("%3d is not prime number.\n", n);
}
}
return 0;
}
//判断是否是素数
int isPrime(int n)
{
int i, j;
if(n <= 1)
{ //参数错误
return -1;
}
else if(n == 2)
{ //2是特例,单独处理
return 1;
}
else if(n % 2 == 0)
{ //偶数不是素数
return 0;
}
else
{ //判断一个奇数是否是素数
j = (int)sqrt(n);
for(i=3; i<=j; i+=2)
{
if (n % i == 0)
{
return 0;
}
}
return 1;
}
}
这是一个判断是否是素数的小程序,大家可以尝试尝试coding体验一下,将知识化为实际用途。