myarray[n+1]
我的老师通过使用 ( ) 开始数组并从上往下输入,从而不断从 1 开始数组i=1
。
这是现实世界中的普遍做法吗?他一直在做一些其他奇怪的事情,但这是让我摸索的事情。
不,这不是常见的做法。这通常被认为是不好的做法。
以语言设计的方式索引数组。如果您真的想从 1 开始索引,请使用 Matlab。询问老师他们为什么这样做(然后告诉他们不要这样做)可能对您有用。
数组元素总是以某种方式初始化。即使您只是忽略第 0 个元素,它仍然存在,并且会不必要地浪费内存。它的构造函数甚至可能会产生一些不需要的副作用。
当您希望它与标准库很好地配合时,您也会遇到很多麻烦。std::vector<int> v(array, array+N)
突然之间,当您使用或创建向量时,您必须仔细考虑std::vector<int> v(std::begin(array), std::end(array))
。与标准算法等类似。
如果您想要一个从 0 开始索引感到舒服的理由,请记住它只是一个偏移量。数组下标运算符a[i]
等价于*(a + i)
. 它基本上只是将指针a
(可能通过一些转换检索)偏移i
.
当然没有。C++ 中的数组从 0 开始,这很常见。而且,您还要为另一个不需要的元素付费,这在现实世界中并不好。
不是在 C++ 中,因为在 C++ 中,索引表示从为数组分配的内存块开始的偏移量。所以事实上,你的老师正在浪费一定数量的字节(取决于数组包含的内容)。
例如,它在 Lua 中使用,其中数组通常从 1 开始。
在过去 20 年左右的时间里,我一直以 C 和 C++ 编程为生,但从未在我编写的任何代码中看到过这种情况。所以,不,这绝对不是常见的,甚至不是推荐的。这和其他人说的一样...