#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int urn[5]={100,200,300,400,500};
int *ptr1,*ptr2,*ptr3;
ptr1=urn;
ptr2=&urn[2];
printf("ptr1——首位的地址%p,*ptr1——针指指向的元素%d,&ptr1——地址的地址%p\n",ptr1,*ptr1,&ptr1);
//加法
ptr3=ptr1+4;
printf("ptr1+4——首地址加4为urn[4]的地址%p,*(ptr+4)——a[4]的值%d\n",ptr1+4,*(ptr1+4));
//递增指针
ptr1++;
printf("ptr1=%p,*ptr1=%d,&ptr1——地址的地址%p\n",ptr1,*ptr1,&ptr1);
//递减指针
ptr2--;
printf("ptr2=%p,*ptr2=%d,&ptr2——地址的地址%p\n",ptr2,*ptr2,&ptr2);
//恢复为初始值
--ptr1;
++ptr2;
printf("ptr1=%p,ptr2=%p\n",ptr1,ptr2);
//一个指针减另一个指针
printf("ptr2=%p,ptr1=%p,ptr2-ptr1=%d\n",ptr2,ptr1,ptr2-ptr1);
//一个指针减去一个整数
printf("ptr3=%p,ptr3-2=%p\n",ptr3,ptr3-2);
return 0;
}
捕获.PNG
八种指针变量的基本操作
赋值:把地址赋给指针。例如,用数组名,带地址运算符&的变量名,另外一个指针。
解引用:*运算符给出指针指向地址上存储的值。
取值:和所有变量一样,指针变量也有自己的地址和值。对指针而言,&运算符给出指针本身的地址。
指针与整数相加(相减):可以使用+(-)运算符把指针与整数相加(相减),或整数与指针相加(相减)。无论那种情况,整数都会和指针指向类型的大小(以字节为单位)相乘,然后把结果与初始地址相加(相减)。
递增(递减)指针:递增(递减)指向数组元素的指针可以让该指针移动到数组的下(上)一个元素
指针求差:可以计算两个指针的差值。通常求差的两个指针分别指向同一个数组的不同元素,通过计算求出两个元素之间的距离。差值的单位与数组类型的单位相同。
比较:使用关系运算符可以比较两个指针的值。前提是两个指针都指向相同类项的对象。