有关主函数传参的疑惑求解答

在我学习知道了,函数传参
例如:定义如下这个函数
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 传那两个参数,并且调用

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7493267
  • 以下回答由chatgpt基于相关博客总结生成:

    对于主函数传参,系统并不会自动计算参数个数。而是通过命令行参数来传入参数个数。在C/C++中,主函数的参数是固定的,包括int类型的argc和char类型的argv。

    • argc参数是一个整数,表示命令行参数的个数。它至少为1,因为第一个参数argv[0]永远是程序的名称。
    • 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是一个指向字符串数组的指针,可以通过下标访问每个参数的值。