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]