介绍指针的三种运算方式:加、减、关系运算
数组在内存中是连续存放的,只要知道第⼀个元素的地址,顺藤摸⽠就能找到后⾯的所有元素。所以我们以数组为例子说明指针运算的问题。
1.指针 +/- 整数
#include <stdio.h>
int main()
{
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
int i=0;
int* p = arr;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
printf("%d ", *p);
p++;
}
return 0;
}
include <stdio.h>
int main()
{
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
int i = 0;
int* p = arr;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
printf("%d ", *(p+i));
}
return 0;
}
原先我们在循环中通过下标的方式访问数组中的元素。学习完指针之后我们就可以找到数组首元素的地址,在每次循环中通过指针+1的方式,找到数组每个元素的地址并把它们打印出来。
上面是两种指针+整数的例子。我们可以在每次循环中让p+1,得到下一个数组元素,也可以写成p+i的方式访问后面的数组。
很显然,指针+/-整数后,得到的结果是一个新的指针。
2.指针-指针
因为指针+/-整数,得到的结果是一个新的指针。所以指针-指针的结果是一个整数。下面举一个模拟strlen函数的例子。
#include <stdio.h>
int lenth(char* p)
{
char* s = p; //将首地址交给s
while (*p != '\0')
{
p++;
}
return p-s; //指针减指针
}
int main()
{
char ch = "abcdef";
printf("%d", lenth("abcdef"));
return 0;
}
3.指针关系运算
#include <stdio.h>
int main()
{
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
int* p = arr;
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
while (p + i <arr+sz)
{
printf("%d ", *(p + i));
i++;
}
}