第四章 数组和指针(part5) 总结 & 常用术语

本章介绍了数组和指针。数组和指针所提供的功能类似于标准库的 vector 类与string 类和相关的迭代器所提供。我们可以把vector 类型理解为更灵活、更容易管理的数组,同样,string 是 C 风格字符串的改进类型,而 C 风格字符串是以空字符结束的字符数组。

迭代器和指针都能用于间接地访问所指向的对象。vector 类型所包含的元素通过迭代器来操纵,类似地,指针则用于访问数组元素。尽管道理都很简单,但在实际应用中,指针的难用是出了名的。

某些低级任务必须使用指针和数组,但由于使用指针和数组容易出错而且难以调试,应尽量避免使用。一般而言,应该优先使用标准库抽象类而少用语言内置的低级数组和指针。尤其是应该使用string 类型取代 C 风格以空字符结束的字符数组。现代 C++ 程序不应使用C风格字符串。

术语

C-style strings(C 风格字符串)

C 程序把指向以空字符结束的字符数组的指针视为字符串。在 C++ 中,字符串字面值就是 C 风格字符串。C 标准库定义了一系列处理这种字符串的库函数,C++ 中将这些标准库函数放在cstring 头文件中。由于 C 风格字符串本质上容易出错,C++ 程序应该优先使用 C++ 标准库类string 而少用 C 风格字符串。网络程序中大量的安全漏洞都源于与使用 C 风格字符串和数组相关的缺陷。


compiler extension(编译器扩展)

特定编译器为语言添加的特性。依赖于编译器扩展的程序很难移植到其他的编译器。

compound type(复合类型)

使用其他类型定义的类型。数组、指针和引用都是复合类型。

const void*

可以指向任意 const 类型的指针类型,参见 void *

delete expression(delete 表达式)

delete 表达式用于释放由 new 动态分配的内存:

     delete [] p;

在此表达式中,p 必须是指向动态创建的数组中第一个元素的指针,其中方括号必不可少:它告诉编译器该指针指向数组,而非单个对象。C++ 程序使用delete 取代 C 语言的标准库函数free

dimension(维数)

数组大小。

dynamically allocated(动态分配的)

在程序自由存储区中建立的对象。该对象一经创建就一直存在,直到显式释放为止。

free store(自由存储区)

程序用来存储动态创建对象的内存区域。

heap(堆)

自由存储区的同义词。

new expression(new表达式)

用于分配动态内存的表达式。下面的语句分配了一个有 n 个元素的数组:

     new type[n];

该数组存放 type 类型的元素。new 返回指向该数组第一个元素的指针。C++ 程序使用new 取代 C 语言的标准库函数malloc

pointer(指针)      存放对象地址的对象。
pointer arithmetic(指针算术操作)

可用于指针的算术操作。允许在指针上做加上或减去整型值的操作,以获得当前指针之前或之后若干个元素处的地址。两个指针可做减法操作,得到它们之间的差值。只有当指针指向同一个数组或其超出末端的位置时,指针的算术操作才有意义。

precedence(优先级)

在复杂的表达式中,优先级确定了操作数分组的次序。

ptrdiff_t

cstddef 头文件中定义的与机器相关的有符号整型,该类型具有足够的大小存储两个指针的差值,这两个指针指向同一个可能的最大数组。

size_t

cstddef 头文件中定义的与机器相关的无符号整型,它具有足够的大小存储一个可能的最大数组。

* operator(* 操作符)

对指针进行解引用操作获得该指针所指向的对象。解引用操作符返回左值,因此可为其结果赋值,等效于为该指针所指向的特定对象赋新值。

++ operator(++ 操作符)

用于指针时,自增操作符给指针“加 1”,移动指针使其指向数组的下一个元素。

[] operator([] 操作符)

下标操作符接受两个操作数:一个是指向数组元素的指针,一个是下标 n。该操作返回偏离指针当前指向 n 个位置的元素值。数组下标从 0 开始计数——数组第一个元素的下标为 0,最后一个元素的下标是数组长度减 1。下标操作返回左值,可用做赋值操作的左操作数,等效于为该下标引用的元素赋新值。

& operator(& 操作符)

取地址操作符需要一个操作数,其唯一的操作数必须是左值对象,该操作返回操作数对象在内存中的存储地址。

void*

可以指向任何非 const 对象的指针类型。void* 指针只提供有限的几种操作:可用作函数形参类型或返回类型,也可与其他指针做比较操作,但是不能进行解引用操作。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值