三种指针运算:
1、指针 + - 整数;
2、指针-指针(指针减指针);
3、指针的关系运算;
1、指针 + - 整数;
(1)、指针+整数; 举例如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int i = 0;
int sz = sizeof(a) / sizeof(a[0]);
int* p = &a;
for (i = 0; i < sz; i++)
{
//printf("%d ", *(p + i));
printf("%d ", *p);
p = p + 1; //指针加1
//p++;
}
执行结果如下:
(2)、指针 - 整数;举例如下:
//指针 - 整数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int i = 0;
int sz = sizeof(a) / sizeof(a[0]);
int* p = &a[9]; //p指针指向数组a第九个元素
for (i = 0; i < sz; i++)
{
printf("%d ", *p);
p = p - 1; //p指针-1
}
return 0;
}
执行结果如下:
2、指针-指针:
(1)、数组中指针减指针得到的是数组元素的个数; 举例如下:
int main()
{
int a[6] = { 1, 2, 3, 4, 5, 6 };
printf("%d\n", &a[6] - &a[0]);
/*int* p = &a[6]-&a[0];
printf("%d\n", p);*/
return 0;
}
执行结果如下:
指针-指针:
(2)、字符串数组中指针减指针得到的是字符串的个数; 举例如下:
//模拟strlen()函数,用指针的方式求字符串的长度
#include <stdio.h>
int my_strlen(char* str)//用字符指针p接收字符数组a的首地址,返回int类型
{
char* start = str;//定义开始指针,指向字符元素的首地址
char* end = str;//定义结束指针,遇到\0就结束
while (*end != '\0') //*end等于'\0'后就跳出循环
{
end++;
}
return end - start;
}
int main()
{
char a[] = "nice"; // n i c e \0
int len = my_strlen(a); //传的是字符数组a的首地址
printf("%d\n", len);
return 0;
}
图解如下:
执行结果如下:
3、指针的关系运算;本质是比较指针的大小;
允许指向数组元素的指针与指向数组元素的最后一个元素的指针进行比较,
但不允许与指向数组元素的第一个元素之前的指针进行比较;举例如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define LONG 5
int main()
{
int a[LONG] = { 0 };
int* vp;
for (vp = &a[LONG]; vp > &a[0];)
{
*--vp=1;//先将指针vp-1,再解引用vp的值再赋值为1
}
return 0;
}
图解如下: