数组指针:
/*
数组指针:
指向数组元素的指针
数组指针的作用:
使用数组指针间接访问数组的元素
数组指针的定义:
int *p;
数组指针的初始化:
int a[4]={1,2,3,4};
int *p = a; //数组指针,定义了一个指针变量p赋值数组的首地址(第一个元素的地址),p指向数组的第一个元素
int *p = &a[0]; //等价上面一句话
数组指针如何访问数组的元素:
1)p+1 表示指向数组的下一个元素
2)p-1 指向数组的上一个元素
*/
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a[4]={1,2,3,4};
printf("&a[0] = %p
",&a[0]);
printf("&a[1] = %p
",&a[1]);
printf("&a[2] = %p
",&a[2]);
//数组指针
int *p = a; //p指向数组的第一个元素
printf(" p = %p
",p); //0x7fff5fbff7d0
//p+1*sizeof(int)
printf(" p+1 = %p
",p+1);//== &a[1],误区:0x7fff5fbff7d1
printf(" a+1 = %p
",a+1);
//取得p+1对应的存储单元的内容
printf(" *(p+1) = %d
",*(p+1));
printf(" *(a+1) = %d
",*(a+1));
//使用数组指针和使用数组名的区别
//p = p+1
//*p++ // 1
//p是一个指针变量,既然是一个变量,它存放的值是可以改变的
// printf(" *p++ = %d
",*p++); //1
// printf(" *p = %d
",*p);
//用数组指针遍历数组
for (int i=0; i<4; i++) {
//printf("%d ",*p++); //
printf("%d ",*(a+i)); // p一值指向数组的首地址
}
//学习的误区: 数组名 a是一个常量 *(10++)
//数组名++ 这是错误的
//printf(" *a++ = %d
",*a++); //错误的
printf(" *a = %d
",*a); //1
return 0;
}