目录
前面已经介绍了最基本的指针概念指针(一)以及二级指针,接下来我们学习指针在数组和字符串中的应用。
数组指针
通过指针遍历数组(一)
首先我们给出一个数组,如何通过指针来遍历数组中所有元素?
#include <stdio.h>
int main(){
int arr[] = {
1, 2, 3, 4, 5 };
/*
sizeof(arr)就是整个数组所有元素一共占用的内存大小
sizeof(int)就是一个int型数据占用的内存大小
sizeof(arr) / sizeof(int)就是数组的长度
*/
int len = sizeof(arr) / sizeof(int); //求数组长度
int i;
for(i=0; i<len; i++){
/*
arr 是数组名,指向数组的第 0 个元素,表示数组首地址
arr+i 指向数组的第 i 个元素,*(arr+i) 表示取第 i 个元素的数据
*/
printf("%d ", *(arr+i) ); //*(arr+i)等价于arr[i]
}
printf("\n");
return 0;
}
运行结果:
通过指针遍历数组(二)
我们通过另外一种方式,单独定义一个指针,指向数组
#include <stdio.h>
int main(){
int arr[] = {
1, 3, 5, 7, 9 };
int i, *p = arr, len = sizeof(arr) / sizeof(int);
for(i=0; i<len; i++){
printf("%d ", *(p+i) );
}
printf("\n");
return 0;
}
运行结果:
通过指针遍历数组(三)
对指针变量进行加法和减法运算时,是根据数据类型的长度来计算的。如果一个指针变量 p 指向了数组的开头,那么 p+i 就指向数组的第 i 个元素;如果 p 指向了数组的第 n 个元素,那么 p+i 就是指向第 n+i 个元素;而不管 p 指向了数组的第几个元素,p+1 总是指向下一个元素,p-1 也总是指向上一个元素。
#include <stdio.h>
int main(){
int arr[] = {
1, 3, 5, 7, 9 };
int *p = &arr[2]; //也可以写作 int *p = arr + 2;
printf("%d, %d, %d, %d, %d\n", *(p-2), *(p-1), *p, *(p+1), *(p+2)