C++

C++ Primer学习笔记(三)

Posted by HK on February 12, 2019

第四章 数组、字符串、结构、共用体、枚举、指针

第四章 复合类型

数组

数组声明应指出以下三点:

  • 存储在每个元素中的值的类型
  • 数组名
  • 数组中的元素数

数组是存储同类型数据的集合。数组的维数必须是在编译期可以确定的常量,如整型字面值常量、枚举常量或者是常量表达式中已经初始化的const对象。数组定义如下:

const unsigned buff_size=50;

int int_size = 20;

const unsigned usize = getsize(); //getsize只能在运行时确定

其中,只有buff_size能作为数组的维数。int_size是变量,usize, getsize()的值都要在运行时才能确定。

数组可以在定义时直接初始化,用大括号{}括起来。如果数组元素没有提供初始值,会根据普通变量一样初始化。如int初始化为0,string初始化为””。

需要指出的是对于特殊的字符数组需要注意结束字符串‘\0’的存在。如:

char ch[]={‘c’,’+’,’+’}; //没有结束符

char ch[]={‘c’,’+’,’+’,’\0’}; //显示加上结束符

char ch[]=”c++”; //自动加上结束符

在c语言中,‘\0’是一个很重要的标志,用来确定数据边界。

数组初始化方法

  • (1) 初始化数组时,可省略等号(=)。 double earnings{4} {1.2e4,1.6e4,1.7e4}
  • (2) 可不在大括号内包含任何东西,这将把所有元素都设置为0。
  • (3) 列表初始化禁止缩窄转换

字符串

处理字符串的方式:C-style string、基于string类库的方法。

指针

指针用来指向对象,具体来说,指针保存的是一个对象的地址。

string s = “c++”;

string *ps = &s;

ps便是一个指向string对象的指针,ps指向的便是s的地址。

指针用来遍历数组,对数组的操作均可由指针来完成。

  • 尽量避免使用指针与数组,使用容器及迭代器。
  • 避免使用未初始化的指针!很多运行时错误都源于使用了未初始化的指针。