您的位置:首页 > 编程语言 > C语言/C++

重温《C++ Primer》笔记一 快速入门

2015-03-05 09:12 387 查看

一个简单C++程序的结构

main函数

首先,main函数是程序的入口,即程序是从main函数开始执行的,也是从这里结束。

main函数的执行

main函数与普通函数一样也是被调用才开始执行的,但是调用main函数的对象不是main函数本身,而是由系统调用。

main函数的结束

main函数的结束伴随这一条return语句,此语句想系统返回一个值。在大多数系统中,main函数的返回值代表一个状态指示器,用来反映程序的执行状况。返回值0一般表示main函数成共执行完毕,而其它非零的值则都有操作系统为其定义的特殊意义。注意main函数的返回值必须是int型的,如果返回的是非int型可转换的其它类型则会发生隐式转换。

main函数执行前后

虽然程序是从main函数开始执行,但是在main函数执行前后,进程会执行一些初始化代码和释放空间和资源的代码等操作,例如,全局对象的构造函数、全局对象和静态对象的空间分配和初始化是在main函数之前执行的。

main函数的参数

main函数的形参个数是有限的,由编译器决定,一般没有参数或者有两个参数。即

main(int argc,char *argv[] )
第一个参数是int型的,第二个是字符串类型。argc是命令行中的字符串数,一般称之为argument count。argv是一个指向字符串的指针数组。命令行中的每个字符串被存储到内存中,并且分配一个指针指向它,一般称之为argument value。系统使用空格将各个字符串隔开。一般情况下,把程序本身的名字赋值给argv[0],把最后一个字符串赋给argv[1]。下面的例子是来自C语言中文网中C语言专题中的例子(原文出处:http://c.biancheng.net/cpp/html/725.html)。

编写如下代码

<pre name="code" class="cpp">//c.c
#include "stdio.h"
int main(int argc, char *argv[])
{
int count;
printf("The command line has %d arguments:
", argc - 1);
for(count = 1; count < argc; count++)
printf("%d: %s
", count, argv[count]);
return 0;
}



编译运行,在命令行输入c I love you 回车,下面是从命令行运行该程序的结果:

The command line has 3 arguments:

1:I

2:love

3:you
从本例可以看出,程序从命令行中接受到4个字符串(包括程序名),并将它们存放在字符串数组中,其对应关系:

argv[0]  ------>    c(程序名)

argv[1]  ------>    I

argv[2]  ------>    love

argv[3]  ------>    you
至于argc的值,也即是参数的个数,程序在运行时会自动统计,不必我们操心。

这个例子中,每个字符串都时一个单词(字母),那既然是字符串,要把一句话当作参数赋给程序该怎么办?你可以在命令行里这样输入 c "I love you." "I’m too."。程序运行结果:

The command line has 2 arguments:

1:I love you.

2:I’m too.

其对应关系:

argv[0]  ------>    c(程序名)

argv[1]  ------>    I love you.

argv[2]  ------>    I’m too.
要注意的是,你在命令行的输入都将作为字符串形式存储于内存中。也就是说,如果你输入一个数字,那么要输出这个数字,你应该用%s格式而非%d或者其他。

再来看一个例子:

//d.c
#include "stdio.h"
int main(int argc, char *argv[])
{
FILE *fp;
fp = fopen(argv[1], "w");
fputs("I love you.", fp);
fclose(fp);
return 0;
}
编译运行,打开命令行并输入d love.txt 回车。这样,打开d.c文件所在的目录,你会发现多了一个名为 love.txt 的文件,打开后里面的内容正是世界上说的最多的那句话。

程序的编译与执行

程序编写完成之后的步骤就是进行编译,这个工作由编译器完成。而编译器使用因操作系统的不同而有所差异。但是现如今大部分基于PC的编译器都是与相关的构建和分析工具集成在一起形成一个集成开发环境(IDE)。

常用编译器

调用C++的编译器常用的有GNU编译器和微软的Visual Studio编译器。调用GNU编译器的命令是g++,而调用微软的Visual Studio编译器的命令是cl,关于编译器的更多使用可以参考你所使用系统的编译器使用指南。

输入输出简述

首先要明确的是,C++并没有直接定义进行输入或输出的任何语句,这种功能是由标准库提供的。C++的IO是完全面向对象的。详细可以参考本人转载的博客http://blog.csdn.net/hulifangjiayou/article/details/41969077

在iostream库中定义了两种类类型:istream和ostream,分别表示输入流和输出流。标准库定义了两个IO对象(还有关于错误和日志对象cerr和clog,此处不详解),处理输入的cin和处理输出的cout,它们被分别成为标准输入与标准输出。一般情况下,系统将这些对象与执行程序的窗口联系起来,是的我们每次的输入和输出都是在此窗口中进行。当然也可以对流所联系的窗口进行重定向,到文件或者内存中。

好了,我们已经有了输入与输出对象,以及我们想要随意输入或者输出的内容,要形成一个完整的输入输出表达式,还差一个操作符。输入对应的操作符是>>,输出对应的操作符是<<,而此表达式的返回值是操作数的左值,即为输入输出对象,因此可以进行连续的输入输出。如下:

cout<<"hello "<<"world!"<<endl;
前面的cout<<“hello ”输出hello,其表达式的值还是cout对象,因此之后又形成了一个新的输出语句cout<<"world!"。

初始化与赋值

初始化发生在定义一个变量的时候,即在定义变量时给变量赋值。初始化总是必要的,除非我们确定第一次使用改变量的操作是赋值操作。

关于注释

C++中有单行注释(//)和成对注释(/**/)两种,任何允许有制表符、空格或换行符的地方都允许放注释,字符串之间除外。这个要求是可以解释的,因为在编译时,注释统统被处理成空格,因此,它必须放在允许放空格的地方。

通常书写注释的风格是将一个注释块放在所解释代码的上方。

成对注释不能嵌套。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: