指针的操作

赋值:使用数组名或者地址运算符&来进行地址赋值。

取值:使用*可以取出指针指向的地址中存储的数值。

取指针地址:使用&可以去指针地址。

整数加给指针:整数会和指针所指向的类型的字节数相乘,然后所得结果加到初始地址上。

增加指针的值:使指针指向同类型的下一个元素。

从指针中减去一个整数:这个整数回合指针所指类型的字节数相乘,然后所得结果被初始地址减去。

减小指针的值:使指针指向同类型的上一个元素。

求差值:如果两个指针指向同一个数组,则求出的差值是元素之间的距离,差值的单位是相应类型的大小。

  1. #include<stdio.h> 
  2.  
  3. int main(void){ 
  4.     int urn[5] = {100,200,300,400,500}; 
  5.     int *ptr1,*ptr2,*ptr3; 
  6.  
  7.     ptr1 = urn; 
  8.     ptr2 = &urn[2]; 
  9.  
  10.     printf("ptr1=%p,*ptr1=%d,&ptr1=%p\n",ptr1,*ptr1,&ptr1);//分别打印ptr1中的内容(存储的地址)、ptr1存储的地址所存得值, 
  11.                                                             //ptr1本身的地址 
  12.     printf("ptr1+4=%p,*(ptr1+4)=%d\n",ptr1+4,*(ptr1+4));//int是4字节,所以指针+4相当于指针+(4*4)字节 
  13.     ptr1++; 
  14.     printf("ptr1=%p,*ptr1=%d,&ptr1=%p\n",ptr1,*ptr1,&ptr1);//ptr1自身的地址是不会变的,只是存储的地址增大了一个单位(4字节) 
  15.     ptr1--; 
  16.     printf("ptr1=%p,ptr2=%p,ptr2-ptr1=%d\n",ptr1,ptr2,ptr2-ptr1);//两个指针相减的结果不是存储地址的字节差,而是存储结果的字节差/类型大小 
  17.                                                                  //即两个指针相差的元素单位个数 
  18.     printf("ptr2=%p,ptr2-2=%p",ptr2,ptr2-2);//指针与一个整数相减,运算过程也不是存储的地址减去整数,而是存储的地址减去(整数*类型大小) 
  19.