一 :谁给main函数传参
(1)调用main函数所在的程序的它的父进程给main函数传参,并且接收main函数的返回值
二 :为什么需要给main函数传参
(1)首先mian函数不传承是可以的,也就是说它的父进程调用子程序并且给子程序传参不是必须的。int main(void) 这种形式就代表程序员不需要给main函数传参
#include <stdio.h>u
int main(void)
{
printf("boy.\n"); //输出打印一个boy.
return 0;
}
(2)有时候程序员希望程序有一种灵活性,所以在选择执行程序时通过传参来控制程序中的运行,达到不需要重新编译程序就可以改变程序运行的结果的效果
//但是当程序员需要输出girl时就只能去通过修改源码来进行操作
#include <stdio.h>
int main(void)
{
printf("girl.\n");
return 0;
}
三 :表面上:给mian函数的传参是怎么实现的?
(1)给main函数传参通过argc和argv这两个C语言预定的参数来实现
(2)argc是int类型 ,表示运行程序时给mian函数传递了几个参数
(3)argv是一个字符串数组,这个数组用来存储多个字符串,每个字符串就是我们给main函数传的一个参数,argv[0]就是程序员给这个main函数的第一个参数,argv[2]就是程序员给这个main函数的第二个参数.....依次类推
//实现给main函数进行传参的操作
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i = 0;
printf("perameternum : %d\n",argc);
for(i=0;i<argc;i++)
{
printf(" num %d is :%s\n",i,argv[i]);
}
return 0;
}
运行流程:首先用gcc编译链接生成可执行程序 -> 然后执行程序进行传参 第一个参数是./a.out,第二个参数是ab,第三个参数是abc、第四个参数是abcd
第一行:编译链接生成可执行程序
第二行:运行可执行程序并进行传参
第三行:输出打印了运行时main函数传了几个参数的值‘
第四行:第0个传的参数的字符串
第五行:第1个传的参数的字符串
......
//然后这里通过给main函数传参来进行不改变源码来实现想要的结果
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i = 0;
printf("perameternum : %d\n",argc);
for(i=0;i<argc;i++)
{
printf(" num %d is :%s\n",i,argv[i]);
}
if(!strcmp( ((const char *)argv[1]),((const char *)"0")) )
{
printf("boy.\n");
}
else if(!strcmp(argv[1],"1"))
{
printf("girl.\n");
}
else
{
printf("unkonw !\n");
}
return 0;
}
运行步骤:首先使用gcc编译链接生成可执行程序 -> 然后执行程序 进行传参 第0个参数为./a.out 第1个参数为0
运行结果:由于第1个参数传的为0,所以打印输出的结果为boy.
当给main函数第一个传参传参为1时程序运行的结果:输出为girl.
当给main函数第一个参数传参不为0也不为1时:
当不给main函数第一个参数传参时:
四 :实质上:给mian函数的传参是怎么实现的
(1)其实是程序在被调用时操作系统层面进行的传参,程序员在使用linux系统下进行编程时只需要执行可执行程序并且将要传的参数给出即可,操作系统会帮程序员进行操作,无需程序员手工进行
五:给main函数传参要注意什么
(1)main函数传参都是通过字符串进行的
(2)程序被进行调用时传参,各个参数是通过空格进行分隔的
(3)在程序中使用argv是要先检查argc,一旦不进行检查可能会出现错误