带参的main函数——初识

本文详细解析了C/C++中main函数的参数用法,包括argc和argv的含义及如何通过它们处理命令行输入。

#include <iostream.h>

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

{

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

       {

              cout<<argv[i]<<'\t';            

       }

       return0;

}

 

/*

int argc, char **argv 用于运行时,把命令行参数传入主程序。

 

argc -- 命令行参数总个数,包括 可执行程序名。

argv[i] -- 第 i 个参数。

argv[0] -- 可执行程序名。

 

*/

 

 

 

 

关于带参数的main函数网络收集:
int main(int argc,char **argv) 这里面的**argv含义··

是用来传递参数的,假如你编译成的文件名是a.exe,那么在命令提示符下可以通过a.exe12 34来向程序传递参数,这时两个参数就会传递到字符串数组argv中,注意此时实际传递了三个参数,第一个参数是文件名,第二个参数是12,第三个是34,而argc就是参数个数。

 

 

int argc, char **argv 用于运行时,把命令行参数传入主程序。
 
argc -- 命令行参数 总个数,包括 可执行程序名。
argv[i] --  第 i 个参数。
argv[0] -- 可执行程序名。
 
例如运行:
abc.exe
argc 等于 1, argv[0] 是 "abc.exe"
 
例如运行:
rec.exe  4  5.2
argc 等于 3, argv[0] 是 "rec.exe", argv[1] 是 "4", argv[2] 是 "5.2".
主函数里若有:
int x;
float y;
char s[80];
strcpy(s,argv[0]);  // 程序名存入 了 s
sscanf(argv[1],"%d",&x);  // x 得到数值4
sscanf(argv[2],"%f",&y);  // y 得到数值 5.2

 

 


ANSI-C(C89/C99)的话main()函数有2种主要形式。 

(1) int main(void) 
(2) int main(int argc, char *argv[]) 

(2)也可写成int main(int argc, char **argv) 
argv[argc]放空指针(NULL指针)。 
argc和argv可以用别名。 

另外,还有一种受系统限制的形式: 
int main(int argc, char *argv[], char *envp[]) 
前两个参数同(2),第三个参数envp[]放环境变量。 
这个形式很少用。 

所以严格讲, 
ANSI-C推荐的带参数的main()函数只有上面(2)这一种。 

另外,搜集了一下C和C++中常见的几种形式: 

(1) main() 
(2) int main() 
(3) int main(void) 
(4) int main(int, char**) 
(5) int main(int, char*[]) 
(6) int main(int argc, char **argv) 
(7) int main(int argc, char *argv[]) 
(8) int main( int argc, char *argv[], char*envp[]) 
(9) void main(void) 

(1)是(3)的简写。不推荐使用。 
(2)是(3)的简写。在C++中是正确的形式。 
(3)在C和C++中都是正确的形式。推荐使用。(还有缺省int的main(void)形式)。 
(4)和(5)是不用参数时的一种写法。编译器级别高时会警告。不推荐使用。 
(6)是(7)的另外写法。两种都可以,凭个人爱好。 
(7)是带参数的正确的形式。推荐使用。 
(8)是一种很少用的写法,且受系统限制。 
(9)一般不认为是正确的写法。但是在嵌入式系统中有使用(包括void main()形式

### 有构造函数的作用与必要场景 在 C++ 中,有构造函数是一种特殊的类成员函数,其主要作用是对对象的成员变量进行初始化。通过提供数列表,可以在创建对象时传递初始值给这些成员变量。 #### 1. **有构造函数的主要作用** 有构造函数允许开发者在实例化对象的同时设置特定的状态或配置[^1]。这使得程序更加灵活和高效,因为无需额外调用其他方法来完成初始化工作。例如,在 `Person` 类中: ```cpp // 构造函数 Person(string name, int age) { this->name = name; this->age = age; } ``` 上述代码展示了如何利用两个数 (`string name`, `int age`) 来初始化新创建的对象属性。如果没有这样的机制,则需要先创建一个未初始化的对象再手动赋值,增加了复杂度并可能导致错误。 #### 2. **为什么需要有构造函数?** 以下是几个常见的原因说明为何引入带参数的构造器非常有必要: - **提高代码可读性** 当看到某个具体类型的实例被声明出来的时候就能立刻明白它应该处于什么样的状态之下;如果所有的数据都需要后续单独设定的话会降低整体逻辑连贯性以及增加维护成本。 - **增强安全性** 某些情况下可能希望确保每一个该种类别的实体都至少具备一些基本的信息(比如姓名或者年龄),这样可以防止非法操作的发生——即不允许存在没有任何有效信息的新个体出现于系统之中直到它们得到适当处理之前。 - **简化编程流程** 相比分别执行多个独立语句来进行各项字段填充而言,直接借助单一命令即可达成同样效果显然更为简便快捷同时也减少了潜在失误几率。 #### 3. **典型应用场合分析** ##### 场景一:资源分配管理 对于那些涉及外部资源使用的类别来说(文件流、网络连接等),往往会在建立之初就指定好相应的路径地址或者其他必要的选项以便立即投入使用而不需要等待进一步指示。 示例: ```cpp class FileStream { public: explicit FileStream(const char* filename); private: FILE *filePtr_; }; FileStream::FileStream(const char* filename){ filePtr_ = fopen(filename,"r"); } ``` 这里我们定义了一个接受字符串作为输入数用来打开指定名称文档只读模式下的文件指针型态成员变量初始化过程。 ##### 场景二:数值计算模型构建 假设我们要设计一种矢量(Vector)结构体支持三维空间坐标表示形式(x,y,z),那么很自然地就会想到让使用者能够在生成相应对象之际便告知各个维度上的确切位置从而方便之后的各种运算活动开展下去。 例子如下所示: ```cpp struct Vector3D{ double x_,y_,z_; // Three arguments constructor. constexpr Vector3D(double x,double y ,double z):x_(x),y_(y),z_(z){} }; Vector3D v(1.0,-4.5,7.89); ``` 以上片段清晰表明了当我们打算操纵具有三个分量特征的事物时候怎样快速便捷地获取到预想中的初识形态。 --- ### 总结 综上所述,C++ 的有构造函数不仅能够显著提升软件开发效率而且还能极大地改善最终产品质量水平。合理运用这一特性可以帮助程序员更好地控制应用程序内部各组成部分之间的关系进而实现更加强大稳定的功能模块组合方案。 ```cpp #include <iostream> using namespace std; class ExampleClass { public: // Parameterized Constructor ExampleClass(int valueA, float valueB) : memberA(valueA), memberB(valueB){} void displayValues(){ cout << "Member A Value: "<<memberA<<endl; cout << "Member B Value: "<<memberB<<endl; } private: int memberA; float memberB; }; int main() { ExampleClass exObj(10, 3.14f); exObj.displayValues(); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值