// 定义一个int类型的数组
int a[4] = {1, 2, 3, 4};
// 定义一个int类型的指针,并指向数组的第0个元素
int *p = a;
int i;
for (i = 0; i < 4; i++) {
// 利用指针运算符*取出数组元素的值
int value = *(p+i);
printf("a[%d] = %d \n", i, value);
}
p是指针,a是一个数组
1> 如果p指向了一个数组元素,则p+1表示指向数组该元素的下一个元素。比如,假设p = &a[0],则p+1表示a[1]的地址
2> 对于不同类型的数组元素,p值的改变是不同的。如果数组元素为int类型,p+1代表着p的值加上2(16位编译器环境下)
3> 如果p的初值是&a[0],那么
- p+i和a+i都可以表示元素a[i]的地址,它们都指向数组的第i个元素。a代表数组首地址,a+i也是地址,它的计算方法与p+i相同
- *(p+i)和*(a+i)都表示数组元素a[i]
- 虽然p+i和a+i都指向数组的第i个元素,但二者使用时还是有区别的。因为作为指针变量的p可以改变自身值,如p++,使p的值自增。而数组名a是一个代表数组首地址的常量,它的值是不能改变的,即a++是不合法的
4> 引用一个数组元素可以有两种方法:
下标法: 如a[i]
指针法: 如*(p+i) 或 *(a+i)
网友评论