因为索引实际上意味着指针的偏移量.第一个元素的偏移量为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是地址array和0偏移量).
3(第三个元素)的偏移是2因为它在第三个单元格中,并且单元格大小是1(因为我们有字节数组).第3个元素的实际地址是0010 + 2.
回到我们的编程语言:array[0]表示具有0010地址array[1]的存储单元的内容,表示具有0010 + 1地址(第二元素)的存储单元的内容等.*array在C中指的是第一个元素,*(array+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)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |