数组常识(common sense)
当一个数组被创建,数组下标都是从0开始计数的。例如,创建了一个名为 arr 的数组,可以通过 arr[i] 来读取数据。
arr 为数组名,i 为数组下标。
arr[i] 在编译器内部会被读取转换为另外一种形式:(arr + i)
当 i 为0时,(arr + i)= arr(当前数组名)。因此数组名为一个基址,用于指示数组的第一个元素从哪里开始读取。
骚操作(PDD's way)
编译器将数组转换为(arr + i)的形式,因此可以得到的是:(arr + i)=(i + arr) = i[arr]
所以当 i 为整数时,两种形式可以换着用,完全等价。
代码演示(works in VS2017)
以下通过四种方法读取数组的值,包括指针的方法。
#include "stdafx.h"//这个头文件包含了stdio.h,VS2017新建工程自带这个头文件
#include<conio.h>//_getch()的头文件
int main()
{
int arr[] = { 10, 11, 12, 13, 14 };
/*使用数组下标访问数组元素——方法1*/
for (int i = 0; i < 5; i++)
{
printf("%d\t", arr[i]);
}
printf("\n");
/*使用数组下标访问数组元素——方法2*/
for (int i = 0; i < 5; i++)
{
printf("%d\t", i[arr]);
}
printf("\n");
/*使用数组下标访问数组元素——方法3*/
for (int i = 0; i < 5; i++)
{
printf("%d\t", *(arr+i));
}
printf("\n");
/*使用数组下标访问数组元素——方法4*/
for (int i = 0; i < 5; i++)
{
printf("%d\t", *(i + arr));
}
printf("\n");
_getch();//使黑窗口不一闪而过,等待输入一个字符再退出
return 0;
}
最后得到数组内容,一模一样:
参考书目:《C语言编程精解及面试攻略》