我们知道,数组的第一个元素下标是 0。数组的范围也就是从array[0]
到 array[size-1]
。 但实际上C++支持正负下标。 负下标必须在数组边界内;否则结果不可预知。 以下代码显示了正数组和负数组下标:
C++代码
#include <iostream>
using namespace std;
int main() {
int intArray[1024];
for (int i = 0, j = 0; i < 1024; i++)
{
intArray[i] = j++;
}
cout << intArray[512] << endl; // 512
int *midArray = &intArray[512]; // 指向了数组中间的数据
cout << midArray[-256] << endl; // 256
cout << intArray[-256] << endl; // 得到不可预知的结果
}
最后一行中的负下标可能产生运行时错误,因为它在内存中指向比数组的原点低 256 个字节的地址。 指针midArray
会初始化为intArray
的中点;因此可以对其使用正数组和负数组索引。数组下标错误不会产生编译时错误,但它们会产生不可预知的结果。