C语言深度总结[全面认识main函数传递参数]
关于main(int argc, char *argv[])参数传递
argc和argv是main函数的形式参数。这两个形式参数的类型是系统规定的。如果main函数要带参数,就是这两个类型的参数;否则main函数就没有参数。
坚持使用标准的意义在于:当你把程序从一个编译器移到另一个编译器时,照样能正常运行。
返回值:
由于是 int main( ..) 那么当时 应当返回 int 但是 return 2.3 ;也能运行正确,这是因为编译器自动转换2.3为int,截断后为return 2;
如果写为 return "abc";那么会报错, error C2440: “return”: 无法从“const char [4]”转换为“int”。
变量名称argc和argv是常规的名称,当然也可以换成其他名称。那么,实际参数是如何传递给main函数的argc和argv的呢?我们知道,C程序在编译和链接后,都生成一个可执行文件。也可以在命令行下带参数执行,命令行执行的形式为:可执行文件名称 参数1 参数2 ... ... 参数n。可执行文件名称和参数、参数之间均使用空格隔开。
如果按照这种方法执行,命令行字符串将作为实际参数传递给main函数。具体为:
(1) 可执行文件名称和所有参数的个数之和传递给argc;
(2) 可执行文件名称(包括路径名称)作为一个字符串,首地址被赋给argv[0],参数1也作为一个字符串,首地址被赋给argv[1],... ...依次类推。
字符串arav[i](i=1,...argc-1)表式第 i 个程序参数,标准C 要求argv[argc]是个null指针,但在有些旧时编译器中却不是这样的,argv向量以及它所指向的字符串必须是可以修改的,并且他们的值在程序执行期间不能被编译器或操作系统所修改。如果编译器并不允许大小写混合的字符串 ,则存储在argv中的字符串必须采用小写形式。
demo演示
#include<stdio.h>
#if 0
//int main(int aa)
//int main(char *aa) //first parameter of 'main' (argument count) must be of type 'int'
//int main(int aa, int bb) //second parameter of 'main' (argument array) must be of type 'char **'
//int main(int argc, char *argv[])
#endif
int main(int jake, char name[][])
{
int i;
printf("\nTotal %d arguments\n",argc);
// for(i = 0; i < argc + 100; i++)//可以把当前系统设置的环境变量打印出来
// for(i = 0; i <= argc; i++) //字符串arav[i](i=1,...argc-1)表式第 i 个程序参数,标准C 要求argv[argc]是个null指针
for(i = 0; i < argc; i++)
{
printf("\nArgument argv[%d] = %s \n",i, argv[i]);
}
return 0;
}
总结
1.给main函数传递参数只有一种方式,即main(int argc, char *argv[])。第一个参数必须int,第二个(如果有的话)必须是char**或char *argv[]。
2.argc代表传入参数的个数,argv是一个数组,每个元素都是一个char *。字符串arav[i](i=1,...argc-1)表式第 i 个程序参数,标准C 要求argv[argc]是个null指针。
3.main函数参数理论上支持“无数”个,且参数在进程内支持修改。