指针专题2-数组指针

1 以指针的方式遍历数组元素

int arr[]={11, 22, 33, 44, 55 };
int len = sizeof(arr)/sizeof(int);    //求数组长度
char i;
for(i=0; i<len; i++)
{
  printf("%d ", *(arr+i));      //*(arr+i)等价于arr[i]
}

  arr是int*类型,每次加1时,arr自身的值(地址)会增加sizeof(int)。

2 以数组指针的方式遍历数组元素

int arr[]={11. 22, 33, 44, 55 };
int len = sizeof(arr)/sizeof(int), *p=&arr;    //等价于*p=&arr[0]
char i;
for(i=0; i<len; i++)
{
  printf("%d ", *(p+i));      //*(p+i)等价于*(arr+i)
}

  p、arr、&arr[0] 等价

  *(p+i)、*(arr+i)、arr[i]、p[i ]等价

 3 借助自增运算符遍历数组元素

  不管是数组名还是数组指针,都可以用上面的两种方式来访问数组元素,不同的是:数组名是常量,他的值不能被改变;数组指针是变量(除非特别指明它是常量),它的值可以任意改变。也就是说,数组名只能指向数组的开头,而数组指针可以先指向数组开头,再指向其他元素。

int arr[]={11. 22, 33, 44, 55 };
int len = sizeof(arr)/sizeof(int), *p=&arr;    //等价于*p=&arr[0]
char i;
for(i=0; i<len; i++)
{
  printf("%d ", *p++);      //*p++等价于*(p++)
}

  *p++不能改为*arr++,因为arr是常量,而arr++会改变它的值。

int *p=&arr[2]

猜你喜欢

转载自www.cnblogs.com/Mike2019/p/11807398.html