在我学习知道了,函数传参
例如:定义如下这个函数
int fun (int a,int b)
在主函数中去调用fun函数时,我们需要这样写
fun(a,b);//我们调用fun函数,传入a和b两个参数
而主函数
int main(int argc,char *argv[])
也是两个形参,但是我们传参输入./a.out 123 456这样的时候,我明明没有自己传入int argc 这个参数而去 printf 一下 argc 的值会发现,可以正确打印出我输入参数的个数,这是因为系统会自己自动去计算吗?不需要我自己去输入吗?求解答,谢谢!
主要的疑惑就是普通函数要求多少个形参,我们就传入多少个,而主函数传参也是两个形参,我们实际只传入了后一个参数。前一个参数并不用自己传入,而可以正确打印出来,是因为系统会自己计算吗?
main函数的参数是操作系统执行进程,然后将命令行自行传入的,而且实际上 main函数也不是exe的真正入口函数,之前还有一个 CRTStartup 的函数,它会拆分命令行,给 main 传那两个参数,并且调用
对于主函数传参,系统并不会自动计算参数个数。而是通过命令行参数来传入参数个数。在C/C++中,主函数的参数是固定的,包括int类型的argc和char类型的argv。
在调用主函数时,操作系统会根据用户输入的命令行参数来传递argc和argv参数的值。所以在主函数中打印出传入参数的个数是因为argc参数的值是由操作系统传入的,并不是系统自动计算的。
下面是一个示例代码,演示如何在主函数中打印出传入参数的个数:
#include <iostream>
int main(int argc, char *argv[]) {
std::cout << "传入参数的个数:" << argc << std::endl;
// 打印所有参数
for (int i = 0; i < argc; i++) {
std::cout << "参数" << i << ": " << argv[i] << std::endl;
}
return 0;
}
在命令行中编译并运行该程序,并传入一些参数,例如:
./program arg1 arg2 arg3
输出结果应该是:
传入参数的个数:4
参数0: ./program
参数1: arg1
参数2: arg2
参数3: arg3
在该示例中,argc为4,表示传入了4个参数(包括程序名称本身)。argv是一个指向字符串数组的指针,可以通过下标访问每个参数的值。