C++main函数及参数

article/2025/10/1 20:20:14

转载自:https://www.cnblogs.com/carsonzhu/p/5276317.html

C++ main()函数及其参数

1、首先,想想C/C++在main函数之前和之后会做些什么?

我们看看底层的汇编代码:

__start:

     :
     init stack;
     init heap;
     open stdin;
     open stdout;
     open stderr;
     :
     push argv;
     push argc;
     call _main; (调用 main)
     :
     destory heap;
     close stdin;
     close stdout;
     close stderr;
     :

     call __exit;

我们可以看到main函数也只是其中的一个函数调用而已。

在调用main函数之前,会先进性初始化栈,堆,打开标准输入,输出,错误流,把参数压栈。还有一些全局变量、对象和静态变量、对象的空间分配和赋初值。

在调用main函数之后,要销毁堆内存,关闭标准输入,输出,错误流。

这些都是编译器帮助我们自动生成的,帮助我们启动main函数。

 

2、main()函数及其参数

C++标准允许主函数main()有或没有参数列表。 您能在主函数main()中使用一个或更多的参数。 如下是一些惯例:
int main(int argc, char *argv[])
第一个参数argc,指明有多少个参数将被传递给主函数main(),真正的参数以字符串数组(即第2个参数argv[])的形式来传递。每一个字符串均有自己意思。在这句法上面, 记住, argc代表参数的数量, main()函数本身是在索引0为的第一参数。 所以, argc总是至少为1 。它的总数是从argv列阵的元素数目。 这意味着, argv[0]的值是至关重要的。 如果用户在控制台环境中程序名称后键入含参数的指令, 那么随后的参数将传递给argv[1]。

例如:在vs2015中构建代码,

1

2

3

4

5

6

7

8

#include <stdio.h>

int main(int argc, char *argv[])

{

    int i;

    for (i = 0; i < argc; i++)

        printf("Argument %d is %s.\n", i, argv[i]);

    return 0;

}

保存并编译后,程序名称为---vs2015之main参数测试,在cmd中键入:

简单说,这两个就是用于接受参数和记录参数信息的。

因为在LINUX或DOS中, 使用命令后面一般都加上参数等

 

3、C/C++中如何在main()函数之前执行一条语句?

(1)在C++中,利用全局变量和构造函数的特性,通过全局变量的构造函数执行

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#include <Iostream>

using namespace std;

 

class TestClass

{

        public:

                TestClass();

};

 

 

TestClass::TestClass()

{

        cout<<"TestClass"<<endl;

}

 

TestClass Ts;//定义个全局变量,让类里面的代码在main之前执行

 

int main()

{

        cout<<"main"<<endl;

 

        return 0;

}

 执行结果:

(2)、全局变量的赋值函数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#include <iostream>

using namespace std;

 

int foo(void);

int i = foo();

 

int foo(void)

{

    cout << "before main" << endl;

    return 0;

}

 

int main(void)

 

{

    cout << "i'm main" << endl;

}

执行结果:


(3)、指定入口点,入口点中调用原来的入口点

“I find that the harder i work,the more luck i seem to have!”


http://chatgpt.dhexx.cn/article/CA67fhOy.shtml

相关文章

带参数的的main函数

在main()函数中允许带2个参数&#xff0c;一个为整型argc,另一个是指向字符型的指针数组argv[]。格式&#xff1a; int main(int argc,char *argv[])   其中整型argc表示命令行中字符串的个数&#xff0c;指针数组argv[]指向命令行中的各个字符串。这两个参数可以用任何合法…

C语言main函数参数详解

main函数参数 一共有三个&#xff1a; 1.int argc 整型变量 2.char *argv[] 字符指针的数组&#xff0c;通俗一点就是字符串数组&#xff0c;每个元素都是字符串 3.char *envp[] 字符串数组 这三个东西再怎么神秘&#xff0c;也只是函数参数&#xff0c;只不过是main函数的参数…

main函数的参数

main函数可以不带参数,也可以带参数&#xff0c;这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个&#xff0c;习惯上这两个参数写为argc和argv。因此&#xff0c;main函数的函数头可写为&#xff1a; main (argc,argv) C语言还规定argc(第一个形参…

main函数的参数解析

下面我们看一下main函数的原型&#xff1a; int main(int argc char* argv[],char* envp) {program-statements } 其实main函数有三个参数&#xff1a; 第一个参数&#xff1a;argc是个整型变量&#xff0c;表示命令行参数的个数&#xff08;含第一个参数&#xff09;。第二…

main 函数参数

一、main函数的参数 main函数有三个参数&#xff0c;argc、argv和envp&#xff0c;它的标准写法如下&#xff1a; int main(int argc,char *argv[],char *envp[])** int argc&#xff0c;存放了命令行参数的个数。 char argv[]&#xff0c;是个字符串的数组&#xff0c;每个元…

[C/C++基础知识] main函数的参数argc和argv

该篇文章主要是关于C\C语言最基础的main函数的参数知识,是学习C或C语言都必备的知识点.不知道你是否知道该知识&#xff1f;希望对大家有所帮助.一.main()函数参数通常我们在写主函数时都是void main()或int main() {..return 0;},但ANSI-C(美国国家标准协会,C的第一个标准ANSI…

Python遗传算法初学者教程

Python遗传算法初学者教程 从头开始实施遗传算法来解决现实世界的问题&#xff01; 课程英文名&#xff1a;The Ultimate Beginners Guide to Genetic Algorithms In Python 此视频教程共3.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&#xff0c;源码附件全 …

遗传算法染色体交叉python

遗传算法中两条染色体交叉思想简单&#xff0c;实现略微复杂&#xff0c;所以借鉴https://blog.csdn.net/weixin_41606064/article/details/100862016重新封装了一下&#xff0c;并对其中不完善的地方做了修改&#xff0c;步骤如下&#xff1a; step1:从采用自然数编码的种群中…

Python遗传算法工具箱的使用(二)求解最短路径问题

前言 自从上一篇博客详细讲解了Python遗传和进化算法工具箱及其在带约束的单目标函数值优化中的应用之后&#xff0c;我经过不断学习工具箱的官方文档以及对源码的研究&#xff0c;逐步更加地掌握如何利用遗传算法求解更多有趣的问题了。 首先简单回顾一下Python高性能实用型…

python遗传算法解决分配问题

python遗传算法解决分配问题 import numpy as np import random import matplotlib.pyplot as pltdef get_rand():select [x for x in range(10)]random.shuffle(select)return selecttime np.array([[82, 16, 66, 71, 44, 28, 76, 85, 36, 8],[91, 98, 4, 4, 39, 68, 26, 26…

python遗传算法

学习代码来源于&#xff1a;遗传算法python 一.主要思想 遗传算法是根据达尔文的“适者生存&#xff0c;优胜劣汰”的思想来找到最优解的额&#xff0c;其特点是所找到的解是全局最优解&#xff0c;相对于蚁群算法可能出现的局部最优解还是有优势的。 二.主要名词 个体&…

遗传算法python代码

不知道为什么一个大一的萌新能有这么多事要干......蚁群算法的代码先缓一缓&#xff0c;等博主写完作业&#xff0c;考完英语期中再说吧。关于遗传算法的代码&#xff0c;由于忘记了np数组不copy的时候会直接引用&#xff0c;导致很长一段时间不知道自己哪里出bug了&#xff0c…

python遗传算法解简单整数规划与原理探究

文章目录 一、算例与代码1.1 问题与思路1.2 代码 二、实现细节2.1 什么是种群2.2 编码与解码2.3 如何处理约束2.4 如何从较好解获得新的解 三、反思&#xff1a;真的是采样逼近吗 / 消融实验3.1 最优解和较好解的关系 / 遗传算法为什么可行3.2 为什么交叉能得到更优解3.3 为什么…

遗传算法python

目录 01 遗传本质 02 编码 1.单目标多变量函数 - 无约束 - &#xff08;可画立体图&#xff09; 2.单目标多变量函数 - 罚算法 - 约束​编辑 3.单目标多变量函数 - 带约束 (不明白得出了什么东西&#xff0c;可能是输出评价指标&#xff1f;) 4.多目标函数 - 带约束 可…

python遗传算法(应用篇1)--求解一元函数极值

目录 遗传算法求解过程算法参数构建初始化种群解码&#xff08;二进制>十进制&#xff09;自然选择交叉变异解码&#xff08;新种群>十进制&#xff09;计算新种群的适应度 完整代码及其可视化版本其他numpy中的随机数 下面我们使用遗传算法尝试求解一元函数的最值 y s…

python遗传算法解决分段线性约束问题

问题描述 模型 分析 带有分段约束和max最值&#xff0c;导致使用一般的线性规划pulp问题进行求解会比较麻烦如果将分段约束转化为0/1整数规划&#xff0c;其余变量 u i u_i ui​未必还是整数&#xff0c;就涉及混整问题相对麻烦&#xff0c;所以考虑使用遗传算法进行求解 Py…

Python 遗传算法路径规划

了却一个心愿 文章目录 目录 文章目录 前言 二、主要内容 三、使用步骤 1.将压缩包下载解压 2.读入数据 3.最终结果 前言 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世纪70年代提出,该算法是根据大自然中生物体进化规律…

遗传算法的python实现(手撕python遗传算法)

遗传算法简介 假设有无约束优化问题&#xff1a; z f ( x , y ) zf(x,y) zf(x,y) 如何通过遗传算法求解&#xff1f; 在这里需要将该优化问题与遗传算法中的概念进行对比。 f f f 对应遗传算法的适应度函数。自变量 x , y x,y x,y 对应遗传算法的个体&#xff0c;注意&#…

Python 遗传算法 Genetic Algorithm

粒子群算法常常用于在连续解空间内搜索&#xff0c;而在不连续、离散的空间内常常会出现搜索越界的问题 例如旅行商问题&#xff0c;寻找可以遍历 15 个地点的最短路径&#xff08;当然可以用二进制状态压缩 动态规划解决&#xff09;&#xff0c;以 {0, 1, ..., 14} 表示这些…

python遗传算法之geatpy学习

&#x1f63b;今天我们来学习python中的遗传算法的使用&#xff0c;我们这里使用的是geatpy的包进行学习&#xff0c;本博客主要从geatpy中的各种数据结构一步一步进行学习&#xff0c;请大家耐心看完。 &#x1f424;其实以前也学习过遗传算法&#xff0c;但是主要使用matlab…