目录
一、介绍
二、指针 + 整数 、指针 - 整数
二、指针 - 指针
四、指针的关系运算
一、介绍
在C语言中,指针的运算分为三类
- 1、指针 + 整数 、指针 - 整数
- 2、指针 - 指针
- 3、指针的关系运算
二、指针 + 整数 、指针 - 整数
因为数组在内存中是连续存放的,只要知道第一个元素的地址,顺藤摸瓜就能找到后面的所有元素。
// 利用指针的整数运算,打印数组的每一个元素int main()
{int arr[]={1,2,3,4,5,6,7,8,9,10};int * p =&arr[0];//将首地址交予了指针变量pint i =0;int sz = sizeof(arr)/sizeof(arr[0]);for(i = 0; i < sz; i++){printf("%d",*(p+i));//*(p+i)相当于首地址跳过了i*4 个字节,并指向了p+i 地址的内容}return 0;
}// 在数组中的首地址就是arr[0]的地址// 当p存储的是首地址时// *(p+i) 相当于 arr[0+i] 它们是表示内容// 而 p+i 则相当于 &arr[0+i] 它们是表示地址 甚至可以写成 &arr[0]+i ---> &arr[i]// 利用指针的整数运算,打印出字符串int main()
{int arr = "abcdef";char * p = &arr[0];while(*p != '\0')// abcdef 在数组中是 ['a','b','c','d','e','f','\0'] 二打印字符串并不需要\0{printf("%c",*p);p = p+1;//进行地址的修改 使得*p所指向的内容转移到下一个地址中的内容}return 0;
}
二、指针 - 指针
指针-指针本质是地址减去地址。
而指针-指针的前提是:指针-指针(地址-地址]的前提是两个指针指向同一块空间的。
且指针-指针(地址-地址)得到的值的绝对值是指针和指针之间元素的个数。
int main()
{int arr [10] = {0};int ret = &arr[9] - &arr[0];int ret1 = &arr[0] - &arr[9];printf("%d\n",ret);return 0;}// 得出的答案是 ret = 9 ret1 = -9
// 应用
// 利用指针 - 指针 求字符串的长度int my_strlen(char* str)//传数组名,数组名也就是首元素地址
{char* start = str;//将数组首地址交予一个新的指针变量while (*str != '\0')//打印字符串不打印\0{str++;//指针内存储的地址不断地往下移动}return str - start;//使用最后\0前的指针变量减去首元素的指针变量
}int mian()
{char arr[] = "abcdef";int len = my_strlen(arr);printf("%d",len);return 0;
}
四、指针的关系运算
指针的关系与运算,实质上就是指针比较大小,本质上是地址比较大小
// 应用
// 利用指针的大小关系,打印出数组中的所有元素int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int* p = arr;//arr表示的是首元素地址int sz = sizeof(arr) / sizeof(arr[0]);while (p < arr + sz)//指针的关系运用{printf("%d ",*p);p++;}return 0;
}// p<arr+sz表示的是 p所存储的地址要小于 数组的边界范围的地址
// 例如题中arr[10]是不存在的,而arr+sz相当于&arr[0] + 10 = &arr[10]