c语言之指针运算
//定义一个指针变量 int *p;
(1)指针可以进行加减一个整数:p++、p--、p+i、p-i、p+=i、p-=i等
(2)将一个变量的地址赋值给指针:int a = 1;p = &a;
(3)将数组首元素的地址赋值给指针:int array[3] = {1,2,3};p = array;
(4)将数组第i个元素的地址赋值给指针:p = &array[i];
(5)将函数的入口地址赋值给指针:
#include<stdio.h> #include<iostream> int max(int, int); int main() { int (*p)(int, int); p = max; int res; res = p(2, 3); printf("最大值是:%d\n", res); system("pause"); return 0; } int max(int a, int b) { if (a > b) { return a; } else { return b; } }
(6)将指针p2的值赋值给p1:int a = 2;int *p2 = &a;int* p1 = p2;
(7)指针可以有空值:p = NULL;
(8)两个指针变量可以相减:
#include<stdio.h> #include<iostream> int max(int, int); int main() { int a[4] = { 1,2,3,4 }; int* p1 = a; int* p2 = &a[2]; int p = (p2 - p1); printf("p的值是:%d\n", p); system("pause"); return 0; }
如果两个指针变量都指向同一数组中的元素,则这两个指针之差为两个指针之间的元素个数,上述代码输出为2,因为之间元素为a[1],a[2]。假设变为p1-p2,那么输出结果就是-2,符号表明p1是在p2的后面。
(9)两个指针可以进行比较:
#include<stdio.h> #include<iostream> int max(int, int); int main() { int a[4] = { 1,2,3,4 }; int* p1 = a; int* p2 = &a[2]; bool p = p2>p1; printf("p的值是:%d\n", p); system("pause"); return 0; }
比较的是两个指针指向的值的大小。