c - c语言数组索引相关问题

标签 c windows

为什么数组第一个索引从0开始

最佳答案

因为index其实就是指针的偏移量。第一个元素的偏移量为0。

评论更新好吧,我会试试的。

让我们考虑一个包含 10 个元素的字节数组:

byte array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

考虑这个数组所在的存储单元(假设它从地址 0010h 开始):

   0010  0011  0012  0013  0014  0015  0016  0017  0018  0019
  +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  10 |
  +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+

我们的变量 array 指向 0010h

1(第一个元素)的偏移量是0,它的实际地址是0010 + 0(其中0010数组的地址,0是偏移量)。

3(第三个元素)的偏移量为2,因为它在第三个单元格中,单元格大小为1(因为我们有字节数组)。第三个元素的实际地址是 0010 + 2

回到我们的编程语言:array[0] 表示具有0010 地址的存储单元的内容,array[1]表示0010 + 1地址(第二个元素)的内存单元的内容,依此类推。 C 中的 *array 指的是第一个元素,*(array+1) - 指的是第二个元素。

关于c - c语言数组索引相关问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4355170/

相关文章:

windows - 从操作系统级别配置中删除环境变量的命令行

c - 求串口读取例子

windows - Dos 目录掩码,需要 "*.xxx"而不是 "*.xxxzz"

C - 数组、排序和修改

c - fflush() 没有正确冲洗

我们可以在一个 while(1) 循环中使用两个 break 语句吗?

c++ - 如何从麦克风捕获音频以通过 socket 发送?

Windows 中的 Java 和符号链接(symbolic link)

c - 外部函数原型(prototype)和静态定义

c++ - 在 C 下通过引用传递指针参数?