以指针形式和以下表形式对数组访问
- 以指针形式,*( a + 4 ),a 数组首元素的首地址,偏移4个该类型的偏移量;
- 以下表形式,a[4],被解析成指针形式操作,a数组首元素的首地址,加上括号内4个元素的偏移量,计算新的地址。
代码
#include <stdio.h>
int main()
{
printf("a 和 &a 的使用\n");
const int MAXN = 8;
int a[MAXN] = {1, 2, 4, 8, 16, 32, 64, 128};
int *ptr_A = (int*)( a + 1); // a + 1 等同于 &a[1],所以 *(a + 1) = a[1] = 1;
int *ptr_P = (int*)(&a + 1); // &a + 1 取数组a的首地址,该地址的值加上sizeof(a)的值,即&a + sizeof(int),也就是下一个数组的首地址
//指针已经越到数组的界限
printf("%d,%d\n", *(ptr_A - 1),*(ptr_P - 1)); //为128
return 0;
}