指针运算——指针+ - 整数; 指针-指针; 指针的关系运算
目录
1.指针 + - 整数
*vp++与(*vp)++的区别:
![]()
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
//把数组arr初始化为1
//写法1:
/*for (i = 0; i < sz; i++)
{
arr[i] = 1;
}*/
//写法2:
/*int* p = arr;
for (i = 0; i < sz; i++)
{
*p = 1;
p++;
}*/
//写法3:
int* p = arr;
for (i = 0; i < sz; i++)
{
*(p + i) = 1;
}
return 0;
}
2.指针 - 指针
指针 - 指针该怎么用呢?
#include<stdio.h> #include<string.h> //方法1: int my_strlen(char* str) { int count = 0; while (*str != '\0') { count++; str++; } return 0; } //2.递归的方法 //3.指针-指针 int my_strlen(char* str) { char* start = str; while (*str != '\0') { str++; } return (str - start); } int main() { int len = my_strlen("abcdef");//传过去的是a的地址 printf("%d\n", len); return 0; }
问:有指针 - 指针,那是否有指针+指针?
答:没有,指针+指针没什么意义。
3.指针的关系运算(比较大小)
实际在绝大部分的编译器上是可以顺利完成任务的,然而我们还是应该避免这样写,因为标准并不保证它可行。
标准规定:
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。