与c语言中的数组索引相关的问题

use*_*647 5 c windows

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

kha*_*hik 5

因为索引实际上意味着指针的偏移量.第一个元素的偏移量为0.

评论时更新嗯,我会试试.

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

byte array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Run Code Online (Sandbox Code Playgroud)

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

   0010  0011  0012  0013  0014  0015  0016  0017  0018  0019
  +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  10 |
  +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
Run Code Online (Sandbox Code Playgroud)

我们的变量array指向0010h.

1(第一个元素)的偏移量是0它的实际地址是0010 + 0(其中0010是地址array0偏移量).

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

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


Pab*_*ruz 1

因为这样指针算术更容易。

C中,您可以将数组视为指针。这样,如果你有这个数组:

char a[50];
char *ptr = a;
Run Code Online (Sandbox Code Playgroud)

使用指针算术,您可以通过向指针添加整数来移动指针,如下所示:

*(ptr + 0); // first character in the array
*(ptr + 1); // second character in the array
// so on, so forth
Run Code Online (Sandbox Code Playgroud)