【发布时间】:2021-06-27 09:50:46
【问题描述】:
我熟悉python的索引系统,但不熟悉C++的...所以请帮助我
我想对一个数组进行负索引...
我试过了
int myarray[5] = {1,2,3,4,5};
cout << myarray[-1];
但它正在生成一些非常大的数字,而不是该数组的一部分...
【问题讨论】:
-
myarray[-1]正在访问数组中第一个元素之前 的元素。这是未定义的行为。实际上,您只是得到未初始化的堆栈垃圾。 -
您可以使用
sizeof计算数组的大小,然后使用arr_size - 1访问最后一个元素:int arr_size = sizeof(myarray) / sizeof(int); cout << myarray[arr_size - 1]; -
@kiner_shah 请注意(1)
sizeof运算符的结果是std::size_t,而不是int,(2)在标准 C++ 中编写它的正确方法只是std::size,并且(3)您的技巧非常危险,因为一旦该数组衰减为指针,它将停止工作。我见过 许多 程序员,尤其是那些刚接触 C 或 C++ 的程序员。 -
@CodyGray,是的,我忘了,
sizeof返回size_t。不错的收获:-) 是的,sizeof如果他们开始使用指针可能会成为问题。从 C++11 开始支持std::size吗? -
不,
std::size是 C++17 及更高版本。问题不是你“开始使用指针”,而是 C 风格的数组隐式衰减为指针,这意味着即使你不打算这样做,你最终也会使用指针!尤其是作为初学者。 @kiner_shah