为什么数组从 0 而不是 1 开始?(C,C++)
Why do arrays start on 0 instead of 1? (C, C++)
这不是真正的代码问题,而是一个疑问,为什么 C 和 C++ 上的数组从 0 开始?它与某些内部流程有关吗?
int array[4]={1,2,3,4};
cout<<array[0];
cout<<array[1];
cout<<array[2];
cout<<array[3]; ///This prints 1234
但为什么而不是
int array[4]={1,2,3,4};
cout<<array[1]; //as the first element
cout<<array[2];
cout<<array[3];
cout<<array[4];
?
因为符号是指针算术的。 array[0]
实际上意味着数组的位置加上 0 个元素的大小。
与 C 语言一样,您在靠近硬件的地方工作。
考虑 int arr[i] 元素。
arr[i] 被解释为 *(arr + i(。现在,arr 是数组的地址或数组的第 0 个索引元素的地址。因此,数组中下一个元素的地址是 arr + 1(因为数组中的元素存储在连续的内存位置(。因此,如果您执行 *(arr+0(,它会给出数组的起始内存位置。*(arr+1( 给出下一个内存位置。所以这个即 0,1,..等可以使用像偏移一样。
正如@ravnsgaard在 C 中所说,您正在靠近硬件工作。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 如何从头开始创建 avi 文件?
- 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?
- 自一周开始以来的秒数?
- 一旦双簧管录制开始,主 UI 线程就会被阻止
- GStreamer在开始任何播放之前进行搜索
- 使 std::fstream 写入文件末尾,但从头开始读取
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- 哪个C++规范开始支持 std::vector
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 如何在调试中通过传递引用开始
- 如何使用 picojson.h 在 c++ 中从头开始创建 json 对象
- 从特定键开始遍历地图
- 列表的有效性在插入后开始迭代器
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误
- 试图修复一个错误,该错误不会让我开始编程其余部分
- 甚至在开始执行之前出现分段错误
- 为什么 Glib::VariantBase::store 方法破坏了给定缓冲区的开始