提到C语言的函数,有太多内容要讲,今天我们要看的是main()函数。
main()函数时程序的入口点,任何程序都要有main()函数,一般大家都怎么写main()函数啊?
main();
void main();
void main(void);
int main();
int main(void);
int main(int argc,char * argv[]);
好像哪种都可以啊!是这样吗?好像编译器从没报过错啊?这时因为编译器对main()函数的扩展,如果编译器不支持这块,则有可能会报错,而标准的写是什么呢?有两种:
int main(void);
int main(int argc,char *argv[]);
有的同学做过单片机,好像都是main()啊,也没问题啊,这时因为单片机程序中没人调用main()函数,直接从main()函数调用完了,没返回值。而对我们嵌入式linux C 呢?这里是有操作系统的,是会调用main()函数的,所以这里一般会有返回值,所以 int main(int argc,char *argv[])是最标准的写法。我们今天要讲的就是int main(int argc,char *argv[])!
argc是什么?是参数的个数,什么参数?是我们执行程序时所附给的参数,argv[]是什么,是存放参数的数组,argv[0]是什么呢?是我们执行的程序,例如: ./a.out 。我们下面编写程序看函数时如何调用参数的?
#include
int main(int argc, char *argv[])
{
int i;
for(i = 0;i < argc;i++)
printf("%s
",argv[i]);
return 0;
}
执行结果如下:
fs@ubuntu:~/qiang/hanshu$ gcc -o 1 1.c
fs@ubuntu:~/qiang/hanshu$ ./1 xiao zhi qiang
./1
xiao
zhi
qiang
fs@ubuntu:~/qiang/hanshu$
大家可以看到参数被存在什么位置,是怎么存放的。
那我们能不能对传入的参数进行运算呢?当然可以了!比如下面 传入参数 ./ 1 30 50,将30和50相加。看程序:
include
int tt(char *p)
{
int sum = 0;
while(*p)
sum = sum*10 + *p++ -'0';
return sum;
}
int main(int argc, char *argv[])
{
int j;
int count = 0;
for(j = 1;j < argc;j++)
{
count += tt(argv[j]);
}
printf("%d
",count);
return 0;
}
执行结果如下:
fs@ubuntu:~/qiang/hanshu$ ls
1 1.c hanshu hashu.c
fs@ubuntu:~/qiang/hanshu$ ./hanshu 30 50
80
fs@ubuntu:~/qiang/hanshu$
是可以的。
当然这里给大家介绍一个将字符数字转化成整型数字的方法,把上面写得程序给大家看看
int tt(char *p)
{
int sum = 0;
while(*p)
{ sum *= 10;
sum += (*p++) -'0';
}
return sum;
}
就是 '8' - '0' = 8;ASCII码值相减,我们的目的是得到8,而不是将字符'8'转化成整数8,这时没法转换的,因为'8'是字符,存放的是ASCII码,是56,所以是没法转化成int数据的,但我们可以利用上面的方法得到8,大家要清楚这一点!