作者:流浪者时空 | 来源:互联网 | 2023-05-18 15:55
我经常使用如下代码来索引数组中的项目,只是为了提醒自己数组值是指向数组第一个元素的指针.
int array[] = {0,1,2,3,4,5};
*(array + 2) = 42;
虽然它看起来有点难看,但实际上我更喜欢传统的[]
操作员.
int array[] = {0,1,2,3,4,5};
array[2] = 42;
除了让将来可能会读取我的代码的其他人有点生气之外,使用指针算法在[]
运算符上索引数组有什么后果吗?
1> Nemo..:
C++规范的5.2.1节[expr.sub]说:
......表达式E1[E2]
(根据定义)相同*((E1)+(E2))
因此,根据定义,它们完全相同.
有关旧版本的规范,请参见http://www.open-std.org/jtc1/sc22/open/n2356/expr.html.所有这些措辞都出现了相同的措辞.
[更新]
请注意,"数组值是指向数组的第一个元素的指针"并不完全正确,因为sizeof(array)
(除其他外)将演示.数组在许多上下文中衰减为指针,但这不是一回事.所以我会说你在这里的风格选择简直令人困惑,对其他人甚至对你自己......另外,正如其他评论者指出的那样,你违反了非常普遍和有用的"容器访问"抽象.也就是说,你要排除用一个std::vector
或std::deque
任何其他容器替换阵列.只是穷人的风格,IMO.