C++ 标准库提供了一组丰富的输入/输出功能。

C++ 的 I/O 发生在流中,流是字节序列。

如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。
如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。

I/O库头文件

<iostream>

该文件定义了 cincoutcerrclog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。

<iomanip>

该文件通过所谓的参数化的流操纵器(比如 setwsetprecision),来声明对执行标准化 I/O 有用的服务。

<fstream>

该文件为用户控制的文件处理声明服务。

阅读全文 »

C++ 标准库没有提供所谓的日期类型。C++ 继承了 C 语言用于日期和时间操作的结构和函数。
为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 <ctime> 头文件。

有四个与时间相关的类型:clock_ttime_tsize_ttm。类型 clock_tsize_ttime_t 能够把系统时间和日期表示为某种整数。

结构类型 tm 把日期和时间以 C 结构的形式保存,tm 结构的定义如下:

1
2
3
4
5
6
7
8
9
10
11
struct tm {
int tm_sec; // 秒,正常范围从 0 到 59,但允许至 61
int tm_min; // 分,范围从 0 到 59
int tm_hour; // 小时,范围从 0 到 23
int tm_mday; // 一月中的第几天,范围从 1 到 31
int tm_mon; // 月,范围从 0 到 11
int tm_year; // 自 1900 年起的年数
int tm_wday; // 一周中的第几天,范围从 0 到 6,从星期日算起
int tm_yday; // 一年中的第几天,范围从 0 到 365,从 1 月 1 日算起
int tm_isdst; // 夏令时
};
阅读全文 »

引用

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

引用vs指针

三个主要的不同:

  • 不存在空引用。引用必须连接到一块合法的内存。
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
  • 引用必须在创建时被初始化。指针可以在任何时间被初始化。

创建引用

& 读作引用。

实例:

1
2
3
4
5
6
7
int i = 17;

// 读作 "r 是一个初始化为 i 的整型引用"。
int& r = i;

// 读作 "s 是一个初始化为 d 的 double 型引用"
double& s = d;

int& r = i;int r = i; 不同之处应该是内存的分配吧,后者会再开辟一个内存空间。

阅读全文 »

每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>

using namespace std;

int main()
{
int var1;
char var2[10];

cout << "var1 变量的地址: ";
cout << &var1 << endl;

cout << "var2 变量的地址: ";
cout << &var2 << endl;

return 0;
}

结果:

1
2
var1 变量的地址: 0x61fe1c
var2 变量的地址: 0x61fe12
阅读全文 »

C++ 提供了以下两种类型的字符串表示形式:

  • C 风格字符串
  • C++ 引入的 string 类类型
阅读全文 »

C++中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现。

1
2
3
4
5
int * myFunction()
{
.
.
}

注意:C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。

阅读全文 »

C++ 中可以通过指定不带索引的数组名来传递一个指向数组的指针。

C++ 传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。

如果想要在函数中传递一个一维数组作为参数,必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。同样地,也可以传递一个多维数组作为形式参数。

方式1

形式参数是一个指针:

1
2
3
4
5
void myFunction(int *param)
{
.
.
}

方式2

形式参数是一个已定义大小的数组:

1
2
3
4
5
void myFunction(int param[10])
{
.
.
}

方式3

形式参数是一个未定义大小的数组:

1
2
3
4
5
void myFunction(int param[])
{
.
.
}
阅读全文 »

数组名是指向数组中第一个元素的常量指针。

声明:

1
double runoobAarray[50];

runoobAarray 是一个指向 &runoobAarray[0] 的指针,即数组 runoobAarray 的第一个元素的地址。
因此,下面的程序片段把 p 赋值为 runoobAarray 的第一个元素的地址:

1
2
3
4
double *p;
double runoobAarray[10];

p = runoobAarray;

使用数组名作为常量指针是合法的,反之亦然。因此,*(runoobAarray + 4) 是一种访问 runoobAarray[4] 数据的合法方式。使用 *p、*(p+1)、*(p+2) 等来访问数组元素。

阅读全文 »

C++ 支持多维数组。多维数组声明的一般形式如下:

1
type name[size1][size2]...[sizeN];

例如,下面的声明创建了一个三维 5 . 10 . 4 整型数组:

1
int threedim[5][10][4];
阅读全文 »

C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

阅读全文 »
0%